LeetCode – palindrome_number问题
2016-09-13
问题描述: 判断一个int类型的整数是否是回文的。
要求: 不申请额外的空间。
思路: 第一反应是将int转化成一个String类型,然后利用String类提供的方法判断该String是否为回文字符串,从而可以判断出该int整数是否为回文的。但是,题目要求不能申请额外的空间,创建一个String会在堆空间中new一个对象,该方法不适用。
有博文提到过先将int类型反转,然后判断反转后的数是否和原来的相同。该方法存在的问题是,反转后的int值有可能会越界。
解题思路: 先确定该int值有多少位,假设共有div位,然后每次取出最前面一位和个位比较。取最前面一位的公式是num/(div*10),取个位的公式是num%10。
java程序
public class palindrome_number {
public boolean isPalindrome(int x){
if(x < 0 || x > Integer.MAX_VALUE){
return false;
}
x = Math.abs(x);
System.out.println(Math.abs(x));
int div = 1;
int left = 0;
int right = 0;
while(x/div >= 10){
div *= 10;
}
while(div > 1){
left = x / div;
right = x % 10;
if(left != right){return false;}
x = (x%div)/10;
div /= 100;
}
return true;
}
}