[LeetCode] #9 Palindrome Number 解題

題目連結

題型解說

這是一題難度為簡單的題目

需要設計一個方法,此方法會傳入一個整數 x

確認將 x 反轉後是否依然為原樣,簡單來說就是正著讀反著讀是不是都一樣

範例:

x = 121,則回傳 true
x = -121,則回傳 false,因為 -121 不等於 121-
x = 10,則回傳 false

另外題目有說試著不要將數字轉成字串來解解看

解題思路

第一步判斷 x 如果小於 0 就回傳 false,如果小於 10 就回傳 true

之後看是要用數字的四則運算來求解還是轉成字串求解都可以

如果選擇用數字來求解,步驟與 [LeetCode] #7 Reverse Integer 解題 一樣

如果選擇用字串來求解,可以用一個 while 迴圈搭配兩個索引來確認

第一個索引是字串的開頭,第二個索引是字串的結尾

每次比對一個 char,如果不一樣就直接回傳 false

程式碼

Java

第一種解法

class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0 || (x %10 == 0 && x != 0)) {
            return false;
        }
        
        if (x < 10) {
            return true;
        }
        
        int temp1 = 0;
        int temp2 = x;
        
        while (temp2 != 0) {
            temp1 = temp1 *10 + temp2 %10;
            temp2 /= 10;
        }
        
        return temp1 == x;
    }
}

第二種解法

class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0) {
            return false;
        }
        
        if (x < 10) {
            return true;
        }
        
        String s = String.valueOf(x);
        int index1 = 0;
        int index2 = s.length() -1;
        
        while (index1 < index2) { // 如果數字的個數是奇數,最中間的數字可以不用比對
            if (s.charAt(index1) != s.charAt(index2)) {
                return false;
            }
            
            index1++;
            index2--;
        }
        
        return true;
    }
}