9. Palindrome Number

9. Palindrome Number

Easy

 

Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.

Example 1:

Input: 121
Output: true

Example 2:

Input: -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.

Example 3:

Input: 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.

Follow up:

Coud you solve it without converting the integer to a string?

 

解法:首先判断x是否为负数,用一个小trick,因为整数的最高位不能是0,所以回文数的最低位也不能为0,数字0除外,所以则若发现某个正数的末尾是0了,也直接返回false即可。要验证回文数,就需要看前后半段是否对称,如果把后半段翻转一下,就看和前半段是否相等就行了。于是取出后半段数字,进行翻转,具体做法是,每次通过对10取余,取出最低位的数字,然后加到取出数的末尾,就是将revertNum乘以10,再加上这个余数,翻转也一起完成了,每取一个最低位数字,x都要自除以10。这样当revertNum大于等于x的时候循环停止。由于回文数的位数可奇可偶,如果是偶数的话,那么revertNum就应该和x相等了;如果是奇数的话,最中间的数字就在revertNum的最低位上了,除以10以后和x是相等的,参见代码如下:

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0 || (x % 10 == 0 && x != 0)) return false;
        int revertNum = 0;
        while (x > revertNum) {
            revertNum = revertNum * 10 + x % 10;
            x /= 10;
        }
        return x == revertNum || x == revertNum / 10;
    }
};

运行结果:

9. Palindrome Number_第1张图片

你可能感兴趣的:(9. Palindrome Number)