Check a positive number is a palindrome or not.
A palindrome number is that if you reverse the whole number you will get exactly the same number.
Notice
It's guaranteed the input number is a 32-bit integer, but after reversion, the number may exceed the 32-bit integer.
Example
11
, 121
, 1
, 12321
are palindrome numbers.
23
, 32
, 1232
are not palindrome numbers.
解法一:
1 class Solution { 2 public: 3 /* 4 * @param num: a positive number 5 * @return: true if it's a palindrome or false 6 */ 7 bool isPalindrome(int num) { 8 //negative number 9 if(num < 0) 10 return false; 11 12 int len = 1; 13 while(num / len >= 10) 14 len *= 10; 15 16 while(num > 0) { 17 18 //get the head and tail number 19 int left = num / len; 20 int right = num % 10; 21 22 if(left != right) 23 return false; 24 else { 25 //remove the head and tail number 26 num = (num % len) / 10; 27 len /= 100; 28 } 29 } 30 31 return true; 32 } 33 };
分别过滤出头尾2个数进行比较
解法二:
1 class Solution { 2 public: 3 /* 4 * @param num: a positive number 5 * @return: true if it's a palindrome or false 6 */ 7 bool isPalindrome(int num) { 8 if (num < 0) 9 return false; 10 11 if (num < 10) 12 return true; 13 14 int digits = 0; 15 int t = num; 16 int d = 0; 17 while(t != 0) t /= 10, ++d; 18 19 int left = pow(10, d - 1); 20 int right = 1; 21 while( left >= right) 22 { 23 if (num / left % 10 != num / right % 10) 24 return false; 25 26 left /= 10; 27 right *= 10; 28 } 29 return true; 30 } 31 };
依旧是过滤出头尾2个数进行比较,处理的方式和解法一稍有不同,参考@MagiSu 的代码