题意:
判断一个整数是否为回文数:
1、负数不是回文数
2、个位数一定是回文数
3、12321、6666、11等类似这样的数是回文数
下面是我写的代码:
public boolean isPalindrome(int x) { if(x < 0){ return false; }else if(x<10){ return true; } int a=10,b=10; while(x/a > 9) a *= 10; if(x/a != x%b){ return false; }else{ a = a/10; b = b*10; while(a >= b){ int temp1 = (x%(a*10))/a; int temp2 = (x/(b/10))%10; if(temp1 != temp2) return false; a = a/10; b = b*10; } } return true; }
思路:
1 首先判断是否是正数
2 判断是否是个位数
3 根据算数特性,逐个提出对应位比较是否相等,一旦有不想等马上返回false,如果执行完成还没有不同,就在结尾返回true。
leetcode讨论区方法:
public boolean isPalindrome(int x) { if (x<0 || (x!=0 && x%10==0)) return false; int rev = 0; while (x>rev){ rev = rev*10 + x%10; x = x/10; } return (x==rev || x==rev/10); }
此方法利用回文数的特性:
1 设置一个数为rev=0
2 判断输入数字x是否大于rev,如果大于则进入循环,否则跳出到第4步
3 令rev = rev*10 + x%10 且 x=x/10 , 进入下一个循环
4 如果x是回文数,那么此时的x=rev或者x=rev/10
时间: 2024-10-11 21:23:50