LeetCode—Palindrome Number

受到上个题的启发,先把int reverse了 然后判断是否和原来的数字相等。

这样做的话average case时间复杂度高

看到了别人的解法是用两个指针,只要判断到一位不想等就返回,平均复杂度低一些,但是怎么用指针不好想。他实际上指针就是这一位的base 比如10,100,1000 然后用x分别除以左右两个对应的指针 再去余 实际上就是取了这个位置的数字。

我的代码

public class Solution {
    public boolean isPalindrome(int x) {
        int ans = x;
        int res = 0;
        while ( ans > 0){
            res = (res * 10) + ans % 10;
            ans = ans / 10;
        }
        boolean pa = false;
        if ( res == x)
            pa = true;
        return pa;
    }
}

指针代码 两种 

public boolean isPalindrome(int x) {  
    if(x<0)  
        return false;  
    int div = 1;  
    while(div<=x/10)  
        div *= 10;  
    while(x>0)  
    {  
        if(x/div!=x%10)  
            return false;  
        x = (x%div)/10;  
        div /= 100;  
    }  
    return true;  
} 


bool isPalindrome(int x) {
    if (x < 0) return false;

    int left = pow(10, floor(log10(x)));
    int right = 1;
    while (right < left) {
        if ((x / left - x / right) % 10 != 0) {
            return false;
        }
        right *= 10;
        left /= 10;
    }

    return true;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值