leetocde——Palindrome Number

這個題在leetcode上提示以下: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.leetcode

我本身實測了一下,負數是永遠不能被判爲迴文數的。思路其實很簡答,就是從一個數的兩邊分別向中間靠攏,若是在對稱位置上的兩個數不相等,則不是迴文數。string

從右邊獲取某個位置上的數很簡單,只須要不停地對10取模便可。從左邊取數須要一點技巧,詳情可見代碼。注意,int表示的最大位數爲10,若是要取第10位的數,那麼pow(10, 10)對於int來講時溢出的,因此須要用long long類型來保存結果。it

代碼以下:io

class Solution
{
public:
    bool isPalindrome(int x)
    {
        if (x < 0) return false;
        int bits_number = test_size(x);
        if (bits_number == 1) return true;

        int b = bits_number - 1;
        int x1 = x;
        int right, left;
        for (int i=0; i<bits_number/2; i++)
        {
            right = x1 % 10;
            left = x / my_pow(10, b) - x / my_pow(10, b+1) * 10;    //這裏要考慮溢出問題
            if (right != left)
            {
                return false;
            }
            x1 = x1 / 10;
            b = b - 1;
        }

        return true;
    }

private:
    int test_size(int x)
    {
        int i;
        for (i = 0; x != 0; i++)
        {
            x = x / 10;
        }
        return i;
    }

    long long my_pow(int a, int b)      //考慮到溢出問題,返回值設爲long long
    {
        if (b < 0) return 0;
        long long result = 1;
        for (int i=0; i<b; i++)
        {
            result = result * a;
        }
        return result;
    }
};
相關文章
相關標籤/搜索