LeetCode 009 Palindrome Number

来源:互联网 发布:网上约车软件 编辑:程序博客网 时间:2024/05/21 08:35
题目


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


思路


1 题目不算难,方法有很多,但是要考虑极限情况,就可能会把很多方法给撇除了。
2 首先考虑负数的话 ,返回false;这样就可以单独拿出来作判断。
3 考虑如果把数字颠倒过来来和原来的比较。可是颠倒过来有可能溢出,所以用字符串的方式颠倒也不成立。
4 考虑把每个数字都记录下来,然后对比;不满足题意(不能用额外空间)
5 最后留下来的就是利用数字本身的性质一步步来做。余数,除数的理解基础扎实即可。

代码


public class Solution {    public boolean isPalindrome(int x) {        if(x<0){            return false;        }        int cur =x;        int divisor =1;        while(cur/divisor>=10){            divisor*=10;        }        cur =x;        while(divisor>=10){            int low = cur%10;            int high = cur/divisor;            if(low!=high){                return false;            }            cur =  (cur%divisor)/10;            divisor /=100;                    }        return true;    }}

2015.3.16总结二
再第二次刷的时候,有卡壳的地方,在于确定divisor为多少。
一开始肯定设置divisor 为1。x/divisor为多少的时候继续呢?5,9 碰到1 就停止。 10/1继续,然后10/10就停止了,直到99也是/10停止。碰到100/10必须继续,它的极限为>=10。
如果设定不合理,容易出现Divisor溢出的情况。如下代码:
                long Div = 10;        while(x/Div>0){            Div*=10;        }        int maxDiv=(int)(Div/10);




0 0
原创粉丝点击