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 };