1. 程式人生 > >【LeetCode】迴文數

【LeetCode】迴文數

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

示例 1:

輸入: 121
輸出: true

示例 2:

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

示例 3:

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

進階:

你能不將整數轉為字串來解決這個問題嗎?


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        System.out.println(Solution.isPalindrome(n));

    }
}

class Solution {
    public static boolean isPalindrome(int x) {

        if(x<0) return false;//如果是負數,則一定不是迴文數
        if(reverse(x)==x)    //如果逆序處理之後與原數相同,則是迴文數
            return true;
        return false;        //不相同則不是

    }

    public static int reverse(int x) {  //逆序方法

        int reu=0;
        while (x!=0)
        {
            int pop = x % 10;//彈出最後一位
            x/=10;

            /*
            判斷結果是否會溢位:
            */
            if (reu>Integer.MAX_VALUE/10||(reu==Integer.MAX_VALUE/10&&pop>7)) return 0;

            reu=reu*10+pop; //將pop壓入到reu後面
        }
        return reu;

    }

}

思路是先將不可能符合條件的負數除去,然後進行逆序處理(這裡借用了之前整數翻轉題目的程式碼,由於不存在負數,則省去了對負數溢位的判斷),由於是判斷迴文數,根據其特點可以得知,如果逆序溢位了則定然不會是迴文數,因此返回0也定然不會與原數相等,因此符合條件。官方題解中提到了可以優化為對原數的一半數位進行逆序處理再比較。