leetcode 9. 迴文數--天天刷一道leetcode系列!

leetcode 9. 迴文數--天天刷一道leetcode系列!

leetcode 9. 迴文數--天天刷一道leetcode系列!

做者:reed,一個熱愛技術的斜槓青年,程序員面試聯合創始人程序員

前文回顧:
leetcode1. 兩數之和--天天刷一道leetcode系列!
leetcode2. 兩數相加--天天刷一道leetcode系列!
leetcode3. 無重複字符的最長子串--天天刷一道leetcode系列!
leetcode4. 尋找兩個有序數組的中位數--天天刷一道leetcode系列!
leeetcode5.最長迴文子串--天天刷一道leetcode系列!面試

細心的同窗,可能會發現,今天直接跳到9了,由於有些題目不常見,就直接跳過了!這個系列主要是講常見的!數組

題目描述

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

示例 1:ide

輸入: 121
輸出: truecode

示例 2:blog

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

示例 3:字符串

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

解題思路:

若是採用toString()將數字直接轉換成字符串來處理,比較簡單,可是效率比較低。
這裏介紹另一種方式。
對於數字的末位,直接取餘就能夠了,對於數字的首位,咱們能夠這麼算。
首先用一個變量記錄數字的最高位,
好比 12321,能夠標記 help 爲 10000,
第一個末位爲 1,第一個首位爲 12321/10000=1,
接下來咱們須要計算 232 是否爲迴文,怎麼計算呢?
咱們須要去掉首位和末位。
能夠採用 x % help / 10 的方式
12321%10000==2321 能夠將最高位去掉,而後 2321/10==232 能夠將最低爲去掉。
最後不要忘記將 help/100。

代碼:

public boolean isPalindrome(int x) {
        if (x < 0) {
            return false;
        }
        int help = 1;
        int tmp = x;
        while (tmp >= 10) {
            help *= 10;
            tmp /= 10;
        }
        while (x != 0) {
            if (x % 10 != x / help) {
                return false;
            }
            x = x % help / 10;
            help /= 100;
        }
        return true;
    }