zoukankan      html  css  js  c++  java
  • #9_回文数

    Category Difficulty Likes Dislikes
    algorithms Easy (57.25%) 977 -

    我的答案

    public boolean isPalindrome(int x) {
        // 解一: 转成字符串
        // String s = String.valueOf(x);
        // int length = s.length()-1;
        // for(int i=0; i<s.length()/2; i++){
        //     if(s.charAt(i) != s.charAt(length)){
        //         return false;
        //     }
        //     length--;
        // }
        // return true;
    
        // 解二
        if(x<0){
            return false;
        }
        int len = 1;
        while(x/len >= 10){
            len*=10;
        }
        while(x != 0){
            if(x%10 != x/len){
                return false;
            }
            x%=len;
            x/=10;
            len/=100;                
        }
        return true;
    }
    

    解题思路

    解一

    • 转成字符串判断,这是简单的

    解二

    • 取最高位和最低位比较,比完掐头去尾继续比
    • 最低位用 x % 10 取
    • 最高位,先算出位数 len,再用 x % len 取
    • 注意,掐头去尾后,len 变化是 102

    答案分析

    参考方案

    • 首先,负数和末尾为零(除 0 外)不可能是回文
    • 如果是回文,把它的后半部分反转,肯定等于前半部分
    • 因为前半部分一直在除以十,而半部分一直在乘以十,所以当后半部分大于前半部分时,说明反转到一半了
    • 如果最后得到的 right 为奇数位,比如 123,那把最后一位去掉就行
    public boolean isPalindrome(int x) {
        if(x < 0 || (x % 10 == 0 && x != 0)){
            return false;
        }
        int right = 0;
        while(x > right){
            right = right * 10 + x % 10;
            x/=10;
        }
        return x == right || x == right / 10;
    }
    

    时间复杂度 O(log10n)

    空间复杂度 O(1)

    备注



  • 相关阅读:
    NET性能优化方面的总结
    SVN 全局忽略列表
    Visual Studio 2005 IDE Themes
    如何编写网络监视器
    微软研究院Detour开发包之API拦截技术
    NDIS HOOK实现方法
    如何使用MAP文件找到程序崩溃时源码是哪行异常
    QT 环境变量设置
    Winsock工作模型 ( 转 )
    如何使用MAP文件找到程序崩溃的原因
  • 原文地址:https://www.cnblogs.com/mdz3201/p/leetcode_9.html
Copyright © 2011-2022 走看看