9. Palindrome Number

Determine whether an integer is a palindrome. Do this without extra space.

思路:很容易想到将数字转化为字符串,但是题目要求不使用额外空间,所以考虑反转数字,然后考虑怎样避免溢出,可以用一个long型避免int型的溢出,或者根据回文数字特点,可以只将数字的一半进行反转,这样就不会溢出了。

 1 class Solution {//用了额外空间,不合题意
 2 public:
 3     bool isPalindrome(int x) {
 4         char arr[20];
 5         if(x<0)return false;
 6         int i=0;
 7         while(x)
 8         {
 9             arr[i++]=x%10-'0';
10             x=x/10;
11         }
12         for(int left=0, right=i-1; left<right; ++left, --right)
13         {
14             if(arr[left]!=arr[right])return false;
15         }
16         return true;
17     }
18 };

 

 1 class Solution {//不用额外空间的写法,只反转一半,考虑特殊情况10,100,1000...
 2 public:
 3     bool isPalindrome(int x) {
 4         if(x<0 || (x%10==0 && x!=0))return false;
 5         int reverseX=0;
 6         while(x>reverseX)
 7         {
 8             reverseX=reverseX*10+x%10;
 9             x=x/10;
10         }
11         return x==reverseX || x==reverseX/10;
12     }
13 };

 

posted @ 2018-01-01 10:31  jeysin  阅读(96)  评论(0编辑  收藏  举报