zoukankan      html  css  js  c++  java
  • 9

    思路

    这道题, 一下就能联想到第7题, 因为回文数不就是倒过来和自己相等吗? 那么我们reverse输入, 对比原输入即可.

    实现

    个人考虑了如下corner case :

    1. 负数 : 一律不是
    2. 0555, +323 之类的 : 由于输入的是int, 这种值实际被传入时已经变成了555, 323, 所以其实可以不用考虑.
    3. 溢出 : 可以这么想, 如果能作为int输入, 那么如果是palindrome, 那么reverse是不会溢出的, 所以一旦溢出就不用算了, 这绝对不是palindrome.

    提交

    一次AC

    代码

    public class Solution {
        public boolean isPalindrome(int x) {
            return reverse(x) == x;
        }
    
        private int reverse(int x){
            int re = 0;
            while (x > 0){
                int remainder = x % 10;
                x = x / 10;
                int temp = re * 10 + remainder;
                if((temp - remainder) / 10 != re){
                    // overflow
                    return 0;
                }
                re = temp;
            }
            return re;
        }
    }
    

    最佳实现

    确实有更好的实现思路, 大概可以再省一半的时间, 原理在于它只计算一半, 如果是回文数, 在reverse过程中原数不断变小, reverse数不断变大, 此时在reverse数变大到将要超过原数的时候, 如果是回文数, 这两个值显然是相等的, 所以可以利用这一特征, 只计算一半, 这应该算是最好的解法了 :

    public boolean isPalindrome(int x) {
        if (x<0 || (x!=0 && x%10==0)) return false;
        int rev = 0;
        while (x>rev){
        	rev = rev*10 + x%10;
        	x = x/10;
        }
        return (x==rev || x==rev/10);
    }
    
  • 相关阅读:
    OZ Report 오즈 리포트 개발
    日期 英文 英语 韩文 韩语
    行合并
    R内存扩展 win7内存扩展
    计算日期函数
    C#颜色 Color.FromArgb ColorTranslator 16进制
    Phone
    浏览器 UserAgent
    context.Request.Files post 上传问题件
    The connection to adb is down, and a severe error has occured.
  • 原文地址:https://www.cnblogs.com/nzhl/p/6230247.html
Copyright © 2011-2022 走看看