1. 程式人生 > >空間復雜度為O(1)的回文數判定算法

空間復雜度為O(1)的回文數判定算法

自然數 isp 臨時 args 個數 一位數 一個 循環 num

空間復雜度為O(1)的回文數判定算法

一、題設

  實現空間復雜度為O(1)的回文數判定,輸入為整型常數,要求輸出判斷是否為回文數。

  要求格式如下:

public boolean isPalindrome(int x) {
    //Your judge code    
}

二、概念

  回文數(Palindrome)的定義:設n是一任意自然數。若將n的各位數字反向排列所得自然數n1與n相等,則稱n為一回文數。例如,若n=1234321,則稱n為一回文數;但若n=1234567,則n不是回文數。

  特點:

  1.負數、小數不是回文數;

  2.回文數可以是奇數個或者偶數個數字;

三、分析

  根據回文數的定義,在本題設的程序設計中,應該註意以下幾點:

  1.當回文數倒置後可能存在溢出的情況;

  2.空間復雜度為O(1)要求變量定義個數不能過多,若是一個輸入,則自定義的變量應該定義為1個及以內;

四、算法

  設輸入的數據為X。

  1.若X小於0或者X為10的N次方(N>=1),則返回FALSE;

  2.設比較變量REV為0,REV每次增加X的最後一位數字並且X每次去除最後一位數字,若REV小於等於X,則繼續2步驟,否則進入步驟3;

  3.輸出最終結果,如果REV等於X或者REV除10取整等於X,則X為回文數,否則不為回文數。

五、JAVA代碼

public class PalindromeNumber {

    public static void main(String[] args) {
        PalindromeNumber p = new PalindromeNumber();
        System.out.println(p.isPalindrome(32233223));
    }
    
    public boolean isPalindrome(int x) {
        if(x < 0 || (x != 0 && x % 10 == 0)) {
            
return false; } int rev = 0; while(x > rev) { rev = rev * 10 + x % 10; x = x / 10; } return (x == rev || x == rev / 10); } }

六、優點

  1.該算法只額外定義了一個臨時變量rev,而沒有通過定義字符串,然後進行循環比較;

  2.通過rev的不斷增長以及x的不斷縮短,使兩者最終趨於x/2的長度,不會出現溢出的情況;

  3.性能非常高,所占的時間空間都非常低。

空間復雜度為O(1)的回文數判定算法