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)

    备注



  • 相关阅读:
    【数据分析】6 点发的文章在博客园阅读量最高?
    canvas api 速记
    leetcode 315. Count of Smaller Numbers After Self 两种思路
    一道闭包题题解
    一道经典JS题(关于this)
    HTML5 — 让拖放变的流行起来
    你应该知道的25道Javascript面试题
    关于base64编码的原理和实现
    Python中的None
    Python字符编码和转码
  • 原文地址:https://www.cnblogs.com/mdz3201/p/leetcode_9.html
Copyright © 2011-2022 走看看