第一個題目是將整數進行反轉,這個題實現反轉並不難,主要關鍵點在於如何進行溢出判斷。溢出判斷再上一篇字符串轉整數中已有介紹,本題採用其中的第三種方法,將數字轉爲字符串,使用字符串比較大小的方法進行比較。
代碼如下:
1 class Solution { 2 public: 3 int reverse(int x) { 4 int stand[10]={2,1,4,7,4,8,3,6,4,8}; 5 int getnum[10]; 6 int a=0,flag=0; 7 if(x>0) 8 flag=1; 9 else 10 if(x<0) 11 { 12 flag=-1; 13 x=-x; 14 } 15 else 16 return 0; 17 int count=0; 18 while(x>0) 19 { 20 getnum[count]=(x%10); 21 x=x/10; 22 count++; 23 } 24 25 if(count==10) 26 { 27 int index=0; 28 for(int i=0;i<count;i++) 29 { 30 if(stand[i]==getnum[i]) 31 index++; 32 else 33 if(stand[i]<getnum[i]) 34 return 0; 35 else 36 break; 37 } 38 if(index==10) 39 { 40 if(flag==1) 41 return 2147483648; 42 else 43 return 0; 44 } 45 } 46 47 for(int i=0;i<count;i++) 48 a=a*10+getnum[i]; 49 50 return a*flag; 51 } 52 };
因爲輸入也一定最多是10位數,所以數組大小爲10足夠。
Palindrome Number
第二個題目是尋找回文數,題目要求不要使用多餘的空間。不使用多餘空間的方法是在將數字從低位向高位不斷重組,當進行到一半的時候,必定會相等或者多出一位,除去這一位還是相等的。這樣也不用擔心溢出等問題。