本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41598031
Palindrome Number
Determine whether an integer is a palindrome. Do this without extra space.
思路:
(1)题意中限制不可申请额外的空间,所以不能将整数转为字符串进行处理。如果没有限制,则可将其转为字符串,前后分别进
行遍历即可进行判断。
(2)需要注意的是,需要对负数进行判断,负数显然不是回文串。
(3)首先,需要设置标志位来记录该整数最高位所对最小整数,例如1221,包含所有位数最小整数位1000,则标志位为1000。
(4)其次,判断该整数"/1000"(即对标志位取整)的结果是否和其“%10”(取余数)得到的结果相同,即判断最高位和最低位所
对的数字是否相同,不相同则返回false;
(5)最后,如果相同,首先去除该整数位“最高位”,即该整数减去其 “最高位 * 标志位”(得到结果为221),然后去除其“最低位”,
将所得结果再“/10”(取整,得到结果为22),这样就去掉了最高位和最低位。由于去掉了“两位”,所以标志位对应也需要去
掉“两位”,即标志位需要再“/100”(10的2次方)。循环上述操作,直到该整数小于0,最后返回对应结果。
算法代码实现如下所示:(希望对你有所帮助,谢谢)
public static boolean isPalindrome(int x) { if (x < 0) return false; int flag = 1; //确定为10的多少幂次方 while (x / flag > 9) { flag = flag * 10; } while (x > 0) { //判断最高位和最低位是否相同 if (x/flag != x % 10) { return false; } else { //得到最高位 int left = x / flag; //去掉最高位 x = x - left * flag; //去掉最低位 x = x / 10; //位数少了两位,标志位减少10的2次方100 flag = flag / 100; } } return true; }