LeetCode 9
2018-10-15 本文已影响0人
Junr_0926
9. Palindrome Number
判断一个整数是否是回文数。
- Example 1
输入:121
输出: true
- Example 2
输入:-121
输出:false
解释:回文序列是121-
- Example 3
输入: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