思路:除和求余 取得首位和末尾 比较是否相等。
1 public boolean isPalindrome(int x){ 2 if(x<0){ 3 return false; 4 } 5 int div=1; 6 while(x/div>=10){ 7 div*=10; 8 } 9 while(x!=0){ 10 int left=x/div; 11 int right=x%10; 12 if(left!=right){ 13 return false; 14 } 15 x=(x%div)/10;//去掉最高位和最低位 16 div/=100; 17 } 18 return true; 19 }
其他思路:http://m.blog.csdn.net/blog/yike1207/44307819博文总结了几种方法(整数反转、转化为字符串处理,取高低位比较)该作者认为上述方法都用到了额外的存储空间,不用额外的存储空间一种方法是通过递归,并修改引用参数值。
1 bool isPalindrome(int x, int &y) { 2 // y为必须为引用和指针型可改变的变量 3 if (x < 0) return false; 4 if (x == 0) return true; 5 if (isPalindrome(x/10, y) && (x%10 == y%10)) { 6 // 每次执行到 x%10 == y%10 的时候 x 为前i位,y表示前(n+1-i)位 7 y /= 10; 8 return true; 9 } else { 10 return false; 11 } 12 } 13 bool isPalindrome(int x) { 14 return isPalindrome(x, x); 15 }