[沒事練練][Leetcode-9]Palindrome Number

 

題目要求

Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.

判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
鏈接:https://leetcode-cn.com/problems/palindrome-number

示例

Input: 121 Output: true

Input: -121 Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.

Input: 10 Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.

題解思路

1.比較直觀想到的就是轉換成字符串做反轉操作。
2.題設建議是不要用轉換字符串的方式去做,那麼我想到的思路是先考慮一些邊界情況,這個數是負數的情況。去掉一些邊界情況,將整個數進行反轉,如果反轉後的數字和原始數字相同,那麼這個數字就是迴文。例如,輸入 1221,我們可以將數字 1221,整個反轉爲1221,並對兩個數字進行比較,如果相同的話,就是迴文。

這個逆轉的操作,對於數字1221,可以首先執行1221%10的操作得到1,然後要得到倒數第二個數字,可以將1221除以10,再求餘數得到,同時將最後一位數字乘以10再加上倒數第二位的數字,那麼就是1*10+2 = 12,就得到了想要的結果,以此類推,就得到了逆轉後的數字了。

首先是前面第一和第二種的解法

java版本

1// 直接字符串反轉求解
2class Solution {
3    public boolean isPalindrome(int x) {
4        String result = new StringBuilder(x + "").reverse().toString();
5        return result.equals(String.valueOf(x));
6
7    }
8}
file
 1class Solution {
 2    public boolean isPalindrome(int x) {
 3        if (x < 0 ) {
 4            return false;
 5        }
 6        int originX = x;
 7        int reverseNum = 0;
 8        while(x != 0) {
 9            reverseNum = reverseNum * 10 + x %10;
10            x = x/ 10;
11        }
12
13        return originX == reverseNum;
14    }
15}

file

官方還給了一種題解
官方給的題解是隻需要求一半的數字即可,比如說1221,那麼求到下半部分12,發現和上半部分12相等,即可退出,比如說12321,那麼求到下半部分123,發現比12大,那麼就退出,如果是非迴文,那麼只要下半部數比上半部數大時即可退出循環。

不過我感覺官方給的題解,不是很好理解,但是他這邊考慮了可能完全逆轉會有溢出的問題,從時間效率上來說和第二種差別不大。

 1class Solution {
 2    public boolean isPalindrome(int x) {
 3        if (x < 0 ) {
 4            return false;
 5        }
 6
 7        if (x % 10 ==0 && x!=0) {
 8            return false;
 9        }
10
11        int reverseNum = 0;
12        while(x > reverseNum) {
13            reverseNum = reverseNum * 10 + x %10;
14            x = x/ 10;
15        }
16
17        return x == reverseNum || x == reverseNum/10;
18    }
19}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章