LeetCode(java)9. Palindrome Number

来源:互联网 发布:js cookie大小 编辑:程序博客网 时间:2024/06/08 19:10

Determine whether an integer is a palindrome. Do this without extra space.

题目描述:判断一个数字是否为回文数组,不允许使用辅存。

解法一:将数字x翻转后存于一个long中(防止溢出)

leetcode通过时间为:9ms(不推荐,比较用long来解决溢出并不是题目希望的,目前未想到其他解决溢出的方法)

public boolean isPalindrome(int x)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>    if(x<0)<span style="white-space:pre"></span>        return false;<span style="white-space:pre"></span>int temp = x;<span style="white-space:pre"></span>long rs = 0;<span style="white-space:pre"></span>while(temp != 0)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>rs = rs*10+temp%10;<span style="white-space:pre"></span>temp/=10;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>if(rs == x)<span style="white-space:pre"></span>return true;<span style="white-space:pre"></span>else<span style="white-space:pre"></span>return false;<span style="white-space:pre"></span>}


解法二:模拟从两边向中间靠拢

例如输入1234321

首先细算最左边的位数left = 1000000;

然后数字 x 除 left 得到最左边的数字 a

 x 对10取余得到最右边的数字 b

判断a b两个数字是否相等,不等则返回false,相等则继续。

然后对数字 x 进行处理,目标是:从1234321 变成 23432 

① 将x对left取余的结果赋予x
② 即x从1234321变为234321
③ 再将x除10 得到目标23432
最后对left进行处理

x以及减少2位了,故left = left/100;

循环以上步骤直至left == 0

代码如下:

leetcode通过时间为10ms

public boolean isPalindrome(int x) {if(x<0)return false;else if(x<10)return true;int left = 1;int right = 10;int temp = x;while((temp/=10)!=0){ left*=10;}while(left>0){if(x/left != x%right)return false;x=(x%left)/10;left/=100;}return true;    }


0 0
原创粉丝点击