0009. 回文数

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;
}