[LeetCode 題解]:Palindrome Number

前言

 

【LeetCode 題解】系列傳送門:  http://www.cnblogs.com/double-win/category/573499.htmlhtml

 

1.題目描述

Determine whether an integer is a palindrome. Do this without extra space.git

Some hints:this

Could negative integers be palindromes? (ie, -1)spa

If you are thinking of converting the integer to string, note the restriction of using extra space.rest

You could also try reversing an integer. However, if you have solved the problem "Reverse Integer", you know that the reversed integer might overflow. How would you handle such case?code

There is a more generic way of solving this problem.htm

2. 題意

判斷一個整數是不是迴文數。要求使用常量空間。blog

提示:ci

(1)負數是不是迴文數?字符串

(2)注意常量空間複雜度。將數字轉換成字符串是不可行的。

3. 思路

若是將整個數字轉換再判斷是不是迴文數,那麼就可能出現反轉以後的數字越界。

延續這個思路,可否經過某些技巧來避免越界呢?先看下面的例子:

(1) 1234321 / 12344321

將數字分紅等長的兩部分: 1234 和 4321。那麼能夠看出 4321 反轉以後的數字爲1234. 二者相等,因此1234321爲迴文數。

(2) 12345321

將數字分紅等長的兩部分: 1234 和 5321。那麼能夠看出 5321 反轉以後的數字爲1235.

因爲1234!=1235,因此12345321不是迴文數。

從上面兩個例子能夠看出。在處理一個數字是不是迴文數的過程當中,沒有必要將整個數字反轉。而只須要判斷數字的先後等長的兩部分時候相等便可。

那麼如何在常量空間複雜度內,將數字分紅先後兩部分呢?

記 須要判斷的數字爲x,其前一部分爲firstpart=x,後一部分爲secondpart=0.

採起依次取firstpart的末位,將其添加到secondpart的尾部的方式,直到firstpart<=secondpart.

firstpart secondpart
1234321 0
123432 1
12343 12
1234 123
123 1234

當firstpart<secondpart時,只需反過來將secondpart最後一位轉移到firstpart末位便可。

tmp=1234%10=4;

firstpart=firstpart*10+tmp=123*10+4=1234。

此時secondpart也爲1234.

所以1234321爲迴文數。

4: 解法

class Solution {
public:
    bool isPalindrome(int x) {
        int first=x,second=0,tmp;
        if(x==0) return true;   //zero
        if(x<0|| x%10==0) return false; //negative number or the number is dividable by 10
        
        while(first>second){    // reverse the number
            tmp=first%10;
            second= second*10+tmp;
            first/=10;
        }
        if(first==second) return true;
        else{     // handle the number with odd digits
            tmp = second%10;
            first=first*10+tmp;
            if(first==second) return true;
            else return false;
        }
        return false;
    }
};
做者:Double_Win
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文連接,不然做者保留追究法律責任的權利。   若本文對你有所幫助,您的關注推薦是咱們分享知識的動力!
相關文章
相關標籤/搜索