LeetCode 009 Palindrome Number

题目


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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值