本文共 1296 字,大约阅读时间需要 4 分钟。
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
当然首先理解回文数是什么呀!这道题其实与整数反转那道的思路很类似,首先我们是不是可以也是用取余操作得到的数作为反转之后的首位数呢。只不过这里考虑一个问题就是如果整除了也就是没有余数的情况怎么办。
第一步:先判断返回false的情况,也就是不能反转,通过分析有这样几种情况:1.小于0;2.整除10没有余数并且还要满足概述不等于0的情况。
第二步:开始进行反转的操作,先声明两个变量一个用来存储反转之后的数,一个是存储原始的输入x(x在计算时会改变,所以声明一个全局变量)。
第三步:进行反转操作,这里就不详细分析了,在我的博客关于整数反转那道题有呢。
第四步:判断反转之后的数与原来的x是不是相等。
class Solution { public boolean isPalindrome(int x) { if (x<0 ||(x%10==0 && x!=0)) { return false; } int ret =0; int s = x; while(x>0){ int low = x % 10; //取个位数 x = (x-low)/10; ret = ret*10+low; //反转之后最高位数 } x = ret; //将反转之后的数赋值给x if(s==x||x==0){ //这里就要进行判断了,判断反转之后的数ret是不是与原来的x相等或者等于0 return true; } return false; }}
第2行:将几种绝对为false的情况先列举出来,x<0,或x%100类似于10,20…个位是0的数字,因为0是回文数,但0%10=0,同时还要满足一个x不为0的情况。
第6行:定义整型变量ret=0
第7行:首先将x赋值给s,便于下面第14行的判断。
第8到12行:这是一个反转整数的操作,与题2的一样
第13到16行:在上面计算出来的ret是一个反转之后的整数了,这里我赋值给x,然后在if判断里,判断s是否等于x,这里的s是上面赋值的最初的x;或者满足条件x==0,则返回true
第17行:除了上述方法涉及的情况外,下面再出现的条件放回false。
0,则返回true第17行:除了上述方法涉及的情况外,下面再出现的条件放回false。
这道题思路与整数反转那道题很像,当然解题方法肯定有很多,这里知识提供一下我自己的理解和感悟,新手小白刚开始刷题不足之处往留言指教,感谢。
转载地址:http://pogki.baihongyu.com/