leetcode 9

回文数

Posted by Static on June 10, 2020

题目链接:https://leetcode-cn.com/problems/palindrome-number/

题目描述


分析

1. 栈

利用栈的先进后出特点,将最大位数字顺序添加到栈中,再出栈对比数字的余数

2. 余数

获取数字的位数,对比最大和最小位数字,是否相等,如:1221 -> 1221/1000=1 1221/%10=1


代码实现

public enum Q9 {
    instance;
    public boolean isPalindrome(int x) {
        Stack<Integer> stack = new Stack<>();
        if(x>=0) {
            int t = x;
            while (t > 0) {
                // 入栈
                stack.push(t % 10);
                t = t / 10;
            }

            while (!stack.empty()) {
                // 出栈 对比数字
                if (stack.pop() != x % 10) {
                    return false;
                }
                x = x / 10;
            }
            return true;
        }
        return false;
    }


    public boolean isPalindrome2(int x) {
        if(x<0)return false;
        int t=x;
        int digit=1;
        // 获取 位数 121 -> 100
        while (t>=10){
            t/=10;
            digit=digit*10;
        }

        // 最大位数字
        int l=x;
        // 最小位数字
        int r=x;
        // 对比最大和最小位数字,是否相等
        while (digit>0){
            if(!(r%10==l/digit)){
                return false;
            }
            l=l-l/digit*digit;
            digit=digit/10;
            r=r/10;
        }
        return true;
    }

    public static void main(String[] args) {
        // assert true
        System.out.println(Q9.instance.isPalindrome(121121));
        // assert true
        System.out.println(Q9.instance.isPalindrome(0));
        // assert true
        System.out.println(Q9.instance.isPalindrome(123321));
        // assert true
        System.out.println(Q9.instance.isPalindrome(12321));
        // assert false
        System.out.println(Q9.instance.isPalindrome(10));
        // assert true
        System.out.println(Q9.instance.isPalindrome(101));

        // assert true
        System.out.println(Q9.instance.isPalindrome2(121121));
        // assert true
        System.out.println(Q9.instance.isPalindrome2(0));
        // assert true
        System.out.println(Q9.instance.isPalindrome2(123321));
        // assert true
        System.out.println(Q9.instance.isPalindrome2(12321));
        // assert false
        System.out.println(Q9.instance.isPalindrome2(10));
        // assert true
        System.out.println(Q9.instance.isPalindrome2(101));
        // assert true
        System.out.println(Q9.instance.isPalindrome2(101101));
        // assert false
        System.out.println(Q9.instance.isPalindrome2(-101101));
    }
}