标签:
Q:
Determine whether an integer is a palindrome. Do this without extra space.
A:
这个题目说实话,我是后半句没有看懂的。。。这个without extra space不知道是不是单纯的只是不让用多余空间,如果我理解错了,希望有人能教我一下。。
我们之前解过一个回文的题目回文,感觉这题是不是简单了点,上次用的解法直接套就可以了。就是可能出现了多余的空间。考虑到不能使用多余的空间来操作我之前分析了一个回文的特性:
1、回文列有n个的第i项和n-i相等
如果我们使用这个来判断的话应该时间复杂度是O(n)准确点说是O(n/2),我们能更少点吗?
这样,我们知道JDK中有一个函数StringBUilder的reverse()方法,我下面贴出来大家研讨一下(截取部分):
private static char[] method(String i) {
// TODO Auto-generated method stub
char[] value = i.toCharArray();
int n = value.length-1;
for (int j = (n-1) >> 1; j >= 0; j--) {
int k = n - j;
char cj = value[j];
char ck = value[k];
value[j] = ck;
value[k] = cj;
}
return value;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(method(12321));
}
private static boolean method(int i) {
// TODO Auto-generated method stub
int reverse = 0;
while(i>reverse){
reverse =(reverse<<3)+(reverse<<1)+i - ((((i * 52429) >>> 19) << 3) + (((i * 52429) >>> 19) << 1));//r=i-q*10,截出最后一位
i = (i * 52429) >>> 19;
}
System.out.println(i);
System.out.println(reverse);
return reverse==i||reverse/10==i;
}
最后真是没办法了,不能做到不用多余的空间,最后的只对比一般借鉴了别人的一个解法,感觉还是不错的。
[LeetCode][9]Palindrome Number解析与StringBuilder.reverse()源码实现 -Java实现
标签:
原文地址:http://blog.csdn.net/u014629433/article/details/51628498