码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode第九题_Palindrome Number

时间:2015-05-19 10:43:23      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:leetcode   palindrome   

Palindrome Number

Some hints:

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

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

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?

There is a more generic way of solving this problem.

这题一出来就啪啪啪的打我脸,把我想到的解法都羞辱了一番,于是我在梦中又想了想,不知道这个解法会不会是床说中的generic way。

因为是个int型的数,用这个数从最大的int型位数除起,直到商不为0,这样得到的第一个商就是第一位数,而用这个数对10取余就是最后一位数。再得到前两位数,对前两位数对10取余,得到第二位数。而后面用这个数对100取余,得到后两位数,再除以10,得到倒数第二位数。

public class Solution {


    public static boolean isPalindrome(int x) {
        int i = 9;
        int j = 1;
        int quo = 0;
        int rem = 0;

        if (x < 0) {
            return false;
        }
        if (x==0) {
            return true;
        }
//      通过判断商是否为零确定该整型数的位数
        while (quo == 0) {
            int div = 1;
            for (int k = i; k>0 ; k--) {
                div = div*10;
            }
            quo = x/div;
            i--;
        }
        i++;
//      判断该数是否为一个回文数
        while(i >= j){
            int deno = 1;
            int div = 1;
            for (int k = i; k>0 ; k--) {
                div = div*10;
            }
            quo = x/div;
//          得到最新需要比较的前段数
            quo = quo%10;
            for (int k = j; k>0 ; k--) {
                deno = deno*10;
            }
            rem = x%deno;
//          得到最新需要比较的后段数
            rem = rem/(deno/10);
            if (quo!=rem) {
                return false;
            }
            j++;
            i--;
        }
        return true;
    }
}

这是我想到的除了被hint鄙视了的第三种解法,有点复杂,当然,这里还有简洁的,直接逆置这个数字,开挂处理溢出的解法。但我没想到这个复杂的比直接逆置的效率要高。

public static boolean isPalindromes(int x) {
    int temp = x;

    long  reverse = 0;

    while (temp > 0){
        reverse = reverse*10 + temp%10;
        temp /= 10;
    }

    return reverse == (long)x;
}

Leetcode第九题_Palindrome Number

标签:leetcode   palindrome   

原文地址:http://blog.csdn.net/bigevil/article/details/45833301

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!