[LeetCode-09]迴文數(簡單難度)

題目

判斷一個整數是不是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是同樣的整數。java

例子1算法

輸入: 121
輸出: true

例子2spa

輸入: -121
輸出: false
解釋: 從左向右讀, 爲 -121 。 從右向左讀, 爲 121- 。所以它不是一個迴文數。

例子3code

輸入: 10
輸出: false
解釋: 從右向左讀, 爲 01 。所以它不是一個迴文數。

解題

class Solution {
    public boolean isPalindrome(int x) {
        // 負數,個位是0的數,不知足條件
        if(x < 0 || (x % 10 == 0 && x != 0)) return false;
        int n = 0;
        // 這個循環用於將x的一半放到n中,當n比x大的時候就中止循環
        while (x > n) {
            // 算法題07中用到的n*10進位,x%10取個位數,x/=10丟棄個位
            n = n * 10 + x % 10;
            x /= 10;
        }
        // 若是x是偶數個數,x == n則x是迴文字,若是x是奇數個數,x == n / 10,去掉n的個位,判斷是否相等
        return x == n || x == n / 10;
    }
}

若是x=12321,那麼在通過循環後,x=12,n=123,最後12 == 123/10io

這道題主要仍是運用了%10,*10和/=10class

取x的一半放到n中,則能夠減小循環次數。循環

時間複雜度:O(log10​(n))時間

空間複雜度:O(1)while

相關文章
相關標籤/搜索