LeetCode: 9. Palindrome Number

求一個整數是否是迴文數。
形如121, 73637等等之類的數都是迴文數。要求空間複雜度爲O(1),這就讓很多想轉換爲字符串再去判斷的同學止步了;有的同學可能想把該整數倒轉之後再去和原數比較是否相等,但是倒轉後的數可能超過有符號整數範圍,比如2147483647,倒轉之後是7463847412,顯然不合法。
我的思路是這樣的:逐個去掉該整數的最後一位,將去掉的一位作爲新整數的最高位;一邊“砍掉”指定整數的最低位,一邊構造新的整數,判斷他們是否相等,如果相等或除最後一位不等外其他位相等(分別對應偶迴文和奇迴文),則是迴文數,如果不是,繼續循環。
下面來看代碼:

bool isPalindrome(int x)
{
    if(x < 0 || (x != 0 && x % 10 == 0))
        return false;
    int another = 0;
    while(x >= another)
    {
        if(x == another || x == (another * 10 + x % 10))
            return true;
        else
        {
            another *= 10;
            another += (x % 10);
            x /= 10;
        }
    }
    return false;
}

若整數x的位數爲n,則平均比較次數是n/2,也沒有新開數組,效率是很高的。

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