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);
    }
    
  • 相关阅读:
    迟到感悟
    让自己记住吧。
    hadoop 数据抽取
    指标导入常用函数
    linux shell中单引号、双引号、反引号、反斜杠的区别
    简单解说Linux命令输出与命令替换
    生成表结构
    ASP.NET MVC3在Visual Studio 2010中的变化
    主键自增归0
    解决包含已存在的php文件,但提示就是找不到的问题
  • 原文地址:https://www.cnblogs.com/nzhl/p/6230247.html
Copyright © 2011-2022 走看看