1、最开始想到的办法
整数的做法
核心思想是 12321/10000 = 12321%10 ;
所以首先要知道这个字一共多少位,实际上知道多少位你在做除法的时候还需要对它进行一次循环
因此我们可以直接得到 10000这个东西,怎么得到它的最高位的 单位制呢。
int y =1;
while(x/10 >= 0){
y = y*10;
}
然后就是进行核心算法的计算
while (x != 0){
int left = x/y;
int right = x/%10;
if( left != right){
return false;
}
//x/=10;
x= x%y;
y/=10;
}
return true;
然后就是需要加上边界条件的判断
if (x < 0) return false;
2、使用数学算法的计算,同样也是整数的做法
核心思想是
int reNum = 0;
while (reNum <= x){
reNum = reNum*10 + x%10;
x /= 10;
}
return x == reNum || x == reNum /10 ;
简单介绍一下:
x%10 就是取最后一位 ,然后最后一位乘以10 加上最新的最后一位 就等于从后往前不断 推,得到一个反转数(反转数比正向的数大的时候就停止往前推进),然后此时比较 反转数和 正向数是否一样,就知道是不是回文数。之所以有一个 /10的判断条件,是因为当 数字个数为 奇数的时候,中位数的取值不影响它是否为 一串回文数。
然后同样也要注意判断条件:
x为负数一定不为回文数。
3、转化为字符串然后判断每个字符是否相等
class Solution {
public boolean isPalindrome(int x) {
String reversedStr = (new StringBuilder(x + "")).reverse().toString();
return (x + "").equals(reversedStr);
}
}
作者:MisterBooo
链接:https://leetcode-cn.com/problems/palindrome-number/solution/dong-hua-hui-wen-shu-de-san-chong-jie-fa-fa-jie-ch/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
注意一下
new StringBuilder ("") 就可以将它转为stringbuilder 对象,然后就可以调用reverse()方法
比较的时候需要使用 toString 取出它的字符串。