題目簡析:題意是判斷一個數字是否爲迴文數字,迴文的定義自然是和迴文字符串意思一樣啦,不過數字不是字符串,不能很隨意地取出首位末位等對稱位置的字符進行比較,當然轉換成字符串再比較也是一個方案,不過題目有空間限制,而且這樣效率也比較低。因此我的思路是對數字實現一個“逆轉”操作,將逆轉後數字與原輸入數字對比,若一樣,自然說明了這個數字是迴文數字。
那麼如何實現逆轉呢?這裏我們設定2個數字,一個num1,一個num2。num1是輸入數字,num2暫時是0,但最後我們會讓它變成num1的逆轉數字。
首先我們觀察這個“逆轉的過程”,假設num1=12321
num1: 12321 -> 1232 -> 123 -> 12 -> 1 -> 0
num2: 0 -> 1 -> 12 -> 123 -> 1232 -> 12321
顯然,實現逆轉的操作很簡單,只要不斷對num1取除以10的餘數(num1%10),把獲得的餘數添加到num2(num2=num2*10+餘數),並對num1減一位(num1/10),不斷重複這個過程即可
下面附上代碼
class Solution {
public:
bool isPalindrome(int x) {
if(x<0)
return false;
else if(x<10)
return true;
int num1=x;
int num2=0;
int n;
while(num1>0){
n=num1%10;
num2=num2*10+n;
num1=num1/10;
}
return (num2==x);
}
};
Submission Result: Accepted
Runtime: 0 ms
題目鏈接:https://leetcode.com/problems/palindrome-number/description/