LeetCode 9

2018-10-15  本文已影响0人  Junr_0926

9. Palindrome Number

判断一个整数是否是回文数。

输入:121
输出: true

输入:-121
输出:false
解释:回文序列是121-

输入:10
输出:false

要求:不要转换成字符串

思路

首先对于负数,10的倍数直接返回false。
然后,将输入反转,依次加上x%10,再乘10.
但是,由于只需要判断是否是回文,也就是前半部分和后半部分是否一致。因此只需要转换一半的数字。
假设,转换后的是x
每次从输入中取出最低位(也就是说输入减少了一位数),将x乘10后,将这个最低位放到x的最低位。一直到输入小于或者等于了x,就完成了一半的转换,这时候判断输入和x是否相等,或者是否输入=x/10

#include <iostream>
#include <vector>
#include <string>
using namespace std;

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

int main() {
    Solution solver;
    cout << solver.isPalindrome(1221) << endl;
    cout << solver.isPalindrome(-121) << endl;
}
Screen Shot 2018-10-15 at 10.47.50 PM.png
上一篇下一篇

猜你喜欢

热点阅读