解题思路
此处撰写解题思路
一开始想用数组去存储一次一次求余下来的数,再把数组转为字符串,发现这样数组不好定义有多大,因为数据很大。
bool isalindrome(int x){
int revertedNumber=0; //定义局部变量revertedNumber来保存每一次计算结果,但一开始要设置为零,有点像计数器qwq
if(x<0||(x%10==0&&x!=0)){ //数字的最后一位是0的话肯定不是回文数,因为数字首位不为零,然后要记住的就是!!!0是回文数!!
return false; //直接放回false就好了
}
while(x>revertedNumber){ //每一次x/10就缩小10倍,revertedNumber就扩大10倍,如果是偶数回文数到中间位x==revertedNumber
//那如果是奇数位呢?我们拿12321和1221举例,让1221和12321同时运算,奇数位revertedNumber到12的时候
//x( 123 )>revertedNumber( 12 ),此时按偶数位来说该终止循环了,所以循环条件是让x>=revertedNumber吗
//不对,这样x>=revertedNumber时,还会进入循环一次,在return判断的时候就不相等了,所以去掉 = ;
//但是这样注意到奇数位也还会再进入一次循环,即出来时反倒revertedNumber比x多一位
//所以奇数位就算是回文数你这样直接拿去都不与x相等,又发现如果是回文数奇数位的中间位不影响评判
//所以用revertedNumber/10去除一位进行比较
revertedNumber=revertedNumber*10+x%10;
//这边就是利用这种算法把他们再拼成一个数
x/=10;
}
return x==revertedNumber||x==revertedNumber/10;
}
纯代码
作者:wwhaha
链接:https://leetcode-cn.com/problems/palindrome-number/solution/by-wwhaha-xpg5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。