【Leetcode】9.回文数判断

9.回文数判断

题目:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
解法:

//数学解法
    public boolean isPalindrome(int x){
        System.out.println("****数学解法****");
        if(x<0) return false;
        int num = x;
        //算出最高位数的整10数
        int div = 1;
        while(x/10>=1){
            div*=10;
            x/=10;
        }
        while(num>0){
            //比较左右两边的数
            int left = num/div;
            int right = num%10;
            if(left!=right) return false;
            //抽取中间的数
            num = (num%div)/10;//22
            //每次少两位,除以100
            div/=100;//10
        }
        return true;
    }
    //翻转解法
    public boolean isPalindrome02(int x){
        System.out.println("****翻转解法****");
        //判断不符合条件 x<0 or x的最低位为0
        if(x<0||(x%10==0&&x!=0)) return false;
        /*取后一半的数,进行翻转操作,翻转操作.
       超过一半的话结束,一半的条件如何获取?
       假设1221,取出后两位21 翻转成12 此时刚好与前面的12相等
       这时如果再取出一位2,就比原来的数字大了,这时候就超过了一半
       所以原来的数>取出后翻转的数,在这个范围内,都可以进行翻转
       */
       
        // 翻转操作。
        int rev = 0;

        while(x>rev){
            int pop = x%10;
            x/=10;
            rev = rev*10+pop;
        }
        // 偶数的情况 翻转之后刚好相等 即x==rev
        // 奇数的情况 翻转之后的数比原先的数多了一位中间的值 如121
        //翻转之后的数位12 之前还剩下 1  这时只需要将12/10取整 再比较。
        return x==rev||x==rev/10;

    }
    //字符串解法
    public boolean isPalindrome01(int x){
        System.out.println("****字符串解法****");
        String reversedStr = (new StringBuilder(x+"")).reverse().toString();
        return (x+"").equals(reversedStr);
    }
发布了79 篇原创文章 · 获赞 62 · 访问量 3457

猜你喜欢

转载自blog.csdn.net/Sky_QiaoBa_Sum/article/details/104469505