刷题3 -- 回文数

230 阅读1分钟

题目描述:

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

链接:leetcode-cn.com/problems/pa…

示例 1:

输入:x = 121
输出:true

示例 2:

输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

分析思路1

首先将这个数字转变为一个字符串

然后设置一个left和一个right指针,分别从两边向中间进行比较

解法1

class Solution {
    public boolean isPalindrome(int x) {
        if(x < 0) {
            return false;
        }
        String str = x + "";
       int left=0,right=0;
		if(str.length()%2==0)
	    {
			left=str.length()/2-1;
            right=left+1;
		}
		else {
			left=str.length()/2;
            right=left;
		}
		while (left>=0) {
			if(str.charAt(left) != str.charAt(right))
				return false;
			left--;
            right++;
		}
		return true;
    }
}

分析思路2

首先如果这个数字是一个负数,那么它不可能为一个回文数。

如果是正数,末尾数字为0,也不可能为一个回文数。

去除了这两种情况后,我们来分析,怎么判断它相等?

就是得到这个数字翻转一半的结果进行比较,如果这个数字的位数为偶数,那么这两个数字相等时,就证明了这是一个回文数;如果这是一个位数为奇数的,就将它的最后一个去掉比较,如果相等,则证明是回文数。

解法2

class Solution {
    public boolean isPalindrome(int x) {
        if(x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }

        //求出这个数字的翻转序列
        int rev = 0;
        while(x > rev) {
            rev = rev * 10 + x % 10;
            x = x / 10;
        }
        if(rev == x || rev / 10 == x) {
            return true;
        }
        return false;
    }
}