1. 程式人生 > >9. Palindrome Number(python+cpp)

9. Palindrome Number(python+cpp)

題目:

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

Input: 121 
Output: true

Example 2:

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.

Example 3:

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

Follow up:
Coud you solve it without converting the integer to a string?

解釋:
判斷一個數是否是迴文。首先,負數一定不是迴文。
一種樸素的想法:
1.將原數字倒置後判斷是否和原數字相等,但是,倒置之後數字有可能溢位(這種方法python可用但是c++不可用)
2.雙指標法,去最高位和最低位判斷是否相等,如果相等則去除這兩位繼續判斷,注意len的求法,合理使用/ 和%。
python程式碼:

class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if x<0:
            return False
        cur_len=1
        while (x/cur_len>=10):
            cur_len*=10
        while x>0:
            left=x/cur_len
            right=
x%10 if left!=right: return False else: x=(x%cur_len)/10 cur_len/=100 return True

c++程式碼:

class Solution {
public:
    bool isPalindrome(int x) {
        if(x<0)
            return false;
        int cur_len=1;
        while (x/cur_len>=10)
            cur_len*=10;
        while(x>0)
        {
            int left=x/cur_len;
            int right=x%10;
            if (left!=right)
                return false;
            else
            {
                x=(x%cur_len)/10;
                cur_len/=100; 
            }   
        }
        return true; 
    }
};

總結:
遇到迴文的問題儘量還是不要轉換成字串做,這不是常規的做法。
c++中判斷兩個字串是否相等 str1.compare(str2)==0