ACM之判斷迴文數

題目以下java

圖片.png

這道題比較簡單,先上Python代碼感覺一下,就一行搞定:python

#判斷迴文數
def isPalindrom(x):
    return  str(x) == str(x)[::-1]

這種方法雖然簡單,可是耗時比較長。再用Java解決一下看看ide

方法一優化

顯然負數不多是迴文數,區間[0,9]的整數確定是迴文數,因此把這些肯定的條件先進行判斷spa

將整數的每一位放在鏈表中,而後將鏈表逆序,比較逆序鏈表與順序鏈表元素是否同樣,同樣則是迴文數,不然不是圖片

代碼以下:get

public class PalindromNumber {
    public boolean isPalindrom(int x){
        if(x < 0) return false;
        List<Integer> num = new ArrayList();
        while(x != 0){
            num.add(x % 10);
            x = x / 10;
        }
        int len = num.size();
        List<Integer> numRev = new ArrayList();
        for(int i = len-1;i >= 0;i--){
            numRev.add(num.get(i));
        }
        for(int i = 0;i < len ;i++) {
            if(num.get(i) != numRev.get(i)){
                return false;
            }
                
        }     
        return true;
    }

方法二it

    將上述代碼優化,發現其實咱們只須要比較通常就好了,也就是將數從左往右讀的前一半與從右往左讀的後一半比較就ok,好比一個數12133121,前一半爲1213,後一半是1213,顯然數迴文數。當一個數不能平均分爲兩半時,將較大的數(即前一半)整除10獲得的數再與小數比較就行,由於前一半各位的數字也能夠做爲後一半的最高位,是公用的,去掉不會有影響。如121343121,前一半爲121234,後一半爲1213,12134/10=1213與後一半相同,故判斷爲迴文數class

代碼:List

public class PalindromNumberBter {
    public boolean isPalindrom(int x){
        if(x < 0 || (x > 0 && x % 10 == 0)) return false;
        int half = 0;
        while(x > half) {
            half = half*10 + x%10;
            x = x/10;
        }
        return (x == half  || x == half/10);
    }

能夠直觀的對比他們所需的時間,用時最少的是方法二

圖片.png

相關文章
相關標籤/搜索