#9. 回文数

https://leetcode-cn.com/problems/palindrome-number/description/

原始代码(普通写法)
(提交了一个外网一个除了变量名一模一样的程序结果从256ms变成96ms???)
(用 len=a.length 和直接用差距这么大???)

class Solution {
    public boolean isPalindrome(int x) {
        if(x<0) return false;
        String s= ""+x;
        char[] a = s.toCharArray();
        for (int i=0;i<a.length/2;i++)
        {
            if (a[i]!= a[a.length-i-1]) return false ;
        }
        return true;
    }
}

步骤太多速度太慢

其他思路:
1.用除法实现按位比较

class Solution {
    public boolean isPalindrome(int x) {
        if(x<0) return false;
        int mi  = 0;
        for(int i =1;i<=x;i*=10) mi++;
        for(int i=1 ;i<mi;i++ )
        {
            if( (x/(int)Math.pow(10,mi-i)%10)!=(x%(int)Math.pow(10,i)/(int)Math.pow(10,i-1))) return false;
        }
        return true;
    }
}

(1410110141)无法通过,原因是溢出,把i从int改成double通过

从226ms到126ms ,还能有提速空间

网站优解(原理类似1,思路更好)

class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0 || (x != 0 && x % 10 == 0)) { //x是10的倍数一定不是回文串
            return false;
        }
        int s = 0;
        while (s <= x) {
            s = s * 10 + x % 10;
            if (s == x || s == x / 10) { //分别处理整数长度是奇数或者偶数的情况
                return true;
            }
            x /= 10;
        }
        return false;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值