forked from haoel/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
palindromeNumber.cpp
88 lines (73 loc) · 2.17 KB
/
palindromeNumber.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// Source : https://oj.leetcode.com/problems/palindrome-number/
// Author : Hao Chen
// Date : 2014-06-18
/**********************************************************************************
*
* Determine whether an integer is a palindrome. Do this without extra space.
*
*
* Some hints:
*
* Could negative integers be palindromes? (ie, -1)
*
* If you are thinking of converting the integer to string, note the restriction of using extra space.
*
* You could also try reversing an integer. However, if you have solved the problem "Reverse Integer",
* you know that the reversed integer might overflow. How would you handle such case?
*
* There is a more generic way of solving this problem.
*
*
**********************************************************************************/
#include <stdio.h>
class Solution {
public:
bool isPalindrome(int x) {
return isPalindrome1(x);
return isPalindrome2(x);
}
bool isPalindrome1(int x) {
if (x<0) {
return false;
}
int len=1;
for (len=1; (x/len) >= 10; len*=10 );
while (x != 0 ) {
int left = x / len;
int right = x % 10;
if(left!=right){
return false;
}
x = (x%len) / 10;
len /= 100;
}
return true;
}
bool isPalindrome2(int x) {
return (x>=0 && x == reverse(x));
}
private:
int reverse(int x) {
int y=0;
int n;
while( x!=0 ){
n = x%10;
//check if y is overflowed or not.
//if it is, then it's not palindrome
if ( y > INT_MAX/10 - n) return x-1;
y = y*10 + n;
x /= 10;
}
return y;
}
};
int main()
{
Solution s;
printf("%d is %d\n", 0, s.isPalindrome(0) );
printf("%d is %d\n", -101, s.isPalindrome(-101) );
printf("%d is %d\n", 1001, s.isPalindrome(1001) );
printf("%d is %d\n", 1234321, s.isPalindrome(1234321) );
printf("%d is %d\n", 2147447412, s.isPalindrome(2147447412) );
printf("%d is %d\n", 2142, s.isPalindrome(2142) );
}