题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
可否不将整数转为字符串来解决这个问题?
解决思路
1、思考什么数字一定不为回文数?
不难想到,当数字为负数的时候,一定不是回文数。
所以,当x<0时,返回false。
2、如何将数字倒序输出?
核心思想:使用模运算求%10的余数,从而取出该数字的最后一位,将求出的最后一位数字乘以10进一位,并加上下一次的取余数,然后该数字依次整除实现递归运算。
例如:数字123
123%10的余数是3,3*10=30;
然后123/10=12,此时再对12取余,为2;
30+2=32,然后 32*10 =320;
再对12/10=1,最后320+1=321。实现数字倒序输出。
3、对比正序和倒序数字是否相同
例如:对比123与321,发现两数字不相同,得出结论为false,该数字不是回文数。
Java代码实现
class Solution {
public boolean isPalindrome(int x) {
if (x < 0{
return false;
}
int temp = x;
int reverse = 0;
while(temp != 0{
reverse = reverse*10 + temp%10;
temp = temp/10;
}
return reverse == x;
}
}
运行结果
通过测试Tips
Java中运算符不要搞混:
% 代表模运算,取余。例如:16%3=1
/ 代表除法运算,向下取整。例如:16/3=5
网友评论