0009. 回文数 #
- 标签:双指针
- 难度:简单
一、题目说明 #
描述:给你一个整数x
,如果x
是一个回文整数,返回true
;否则,返回false
。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121
是回文数,而123
不是。
示例
- 示例 1:
输入:x = 121
输出:true
- 示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为-121。从右向左读,为121-。因此它不是一个回文数。
- 示例3:
输入:x = 10
输出:false
解释:从右向左读,为01。因此它不是一个回文数。
提示
- $-2^{31} <= x <= 2^{31} - 1$
二、解题思路 #
1. 视作String,由两边到中间依次比较 #
将整数当作一个字符串String
来处理,由于String
中有charAt()
方法可以通过索引获取对应的字符,所以可以使用两个指针,分别从头、尾开始向中间移动,从而判断是否是回文数。
public boolean isPalindrome(int x) {
String s = x + "";
int left = 0;
int right = s.length() - 1;
while(left <= right){
if(s.charAt(left++) != s.charAt(right--)){
return false;
}
}
return true;
}
2. 数字反转再比较 #
将整个数字进行反转,然后再判断反转后的数字与反转前的数字是否一致。
当然,
-
这里不需要考虑反转后的数字是否越界的情况,因为如果反转后越界了,那一定不是回文数;
-
需要考虑负数的情况,负数一定不是回文数;
仅此而已。
public boolean isPalindrome(int x) {
//负数
if(x < 0){
return false;
}
int z = x;
int y = 0;
//反转数字
while(x != 0){
y = y * 10 + x % 10;
x = x / 10;
}
return z == y;
}