[LeetCode][9]Palindrome Number解析与StringBuilder.reverse()源码实现 -Java实现
来源:互联网 发布:cms排行 编辑:程序博客网 时间:2024/06/02 02:48
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 stubchar[] 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;}
可以看出来jdk中的运算使用了位运算,并且从正中间开始互换数组函数的。这里面有个很巧妙的地方int j=(n-1)>>1;这个-1特别巧妙,直接解决了奇偶数的问题,如果原本是奇数,那么我们直接跳过中间一位的调换,如果偶数我们就会从中间调换。但是我们还面临一个问题就是如何不使用多余的空间来把一个int型的数字分割成一个个的数字。最后想遍了办法也不能借鉴上面的代码,最终借鉴了以前的一个reverseInteger的代码点击打开链接
public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println(method(12321));}private static boolean method(int i) {// TODO Auto-generated method stubint 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;}
最后真是没办法了,不能做到不用多余的空间,最后的只对比一般借鉴了别人的一个解法,感觉还是不错的。
1 0
- [LeetCode][9]Palindrome Number解析与StringBuilder.reverse()源码实现 -Java实现
- leetcode 9 Palindrome Number--java实现
- LeetCode【9】. Palindrome Number --java的实现
- LeetCode-9-Palindrome Number(C语言实现)
- C实现 LeetCode->Palindrome Number
- leetcode 7&9 : Reverse Integer & Palindrome Number
- [LeetCode] Reverse Integer、Palindrome Number
- [Leetcode]Palindrome Number & reverse integer
- Reverse Integer && Palindrome Number-LeetCode
- leetcode Reverse Integer & Palindrome Number
- LeetCode: Reverse Integer,Palindrome Number
- [LeetCode][7]Reverse Integer解析与位运算实现 -Java实现
- [LeetCode Java] 9 Palindrome Number
- LeetCode 9 : Palindrome Number (Java)
- LeetCode 之 Palindrome Number — C++ 实现
- 【Leetcode】【Python】9. Palindrome Number实现
- [Leetcode] Palindrome Number (Java)
- [leetcode] Palindrome Number[java]
- Android textview设置不同的颜色和大小
- 手机开发实战123——VCARD介绍1
- SSH框架
- 关于jquery动画中的淡入淡出的理解
- 手机开发实战124——VCARD介绍2
- [LeetCode][9]Palindrome Number解析与StringBuilder.reverse()源码实现 -Java实现
- 偏最小二乘法程序运算结果
- 手机开发实战125——VCARD介绍3
- ArcGIS 10.x geodatabase attachment之外业篇
- 手机开发实战126——VCARD介绍4
- Android 屏幕保持常亮
- ubuntu14.04初见
- 如何在vs2010中使用SSE指令集
- JAVA 实用类库及其应用