回文数

71 阅读1分钟

回文数

说明

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。

示例 1:

输入:x = 121
输出:true

示例 2:

输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。

来源:力扣(LeetCode) 链接:leetcode.cn/problems/pa…

题解

1和2可以对数字 或者是 字符串进行判断 3只能针对于数字

1.暴力破解

    public static void main(String[] args) {
        int x = 10088001;
        System.out.println(demo(x));
    }
​
    public static boolean demo(int x){
        boolean flag = true;
        //转为String 类型 把每个字符都拆分出来
        String[] split = (x + "").split("");
        //回文数只需要判断前面的一半即可
        int sum = split.length / 2;
        for (int i = 0; i < sum; i++) {
            //如果存在对应位置的数不匹配就表明这不是一个回文数
            //例: 1221  第一个和最后一个对应  第二个 和 倒数第二个对应
            if (!split[i].equals(split[split.length - 1 - i])) {
                flag = false;
                return flag;
            }
        }
        return flag;
    }

2.暴力破解增强版

    public static void main(String[] args) {
        int x = 2;
        System.out.println(demo(x));
    }
​
    public static boolean demo(int x){
        if (x == 0) return true;
        if (x < 0 || x % 10 == 0) return false;
        //转为String 类型 把每个字符都拆分出来
        String str = x + "";
        String s1 = "";
        String s2 = "";
        //思想: 通过截取前半部分和后半部分 来进行比较  相同就true 反正false
        //奇数
        if(str.length() % 2 == 1){
            s1 = str.substring(0, str.length() / 2);
            s2 = str.substring(str.length() - str.length() / 2, str.length());
            //颠倒字符串
            StringBuilder stringBuilder = new StringBuilder(s2);
            stringBuilder.reverse();
            s2 = stringBuilder.toString();
            //偶数
        }else {
            s1 = str.substring(0, str.length() / 2);
            s2 = str.substring(str.length() / 2, str.length());
            //颠倒字符串
            StringBuilder stringBuilder = new StringBuilder(s2);
            stringBuilder.reverse();
            s2 = stringBuilder.toString();
        }
        if(s1.equals(s2)){
            return true;
        }
        return false;

3.通过把数拆分为两个数然后进行判断

    public static void main(String[] args) {
        int x = 10088001;
        System.out.println(demo(x));
    }
​
    public static boolean demo(int x){
        //排除可以确定的数
        if (x == 0) return true;
        if (x < 0 || x % 10 == 0) return false;
        int reversed = 0;
        // 例: 1221
        // 下面循环的思想就是 把前面的半截放在 X中 后面的半截通过反向取值的方式来保存到 re中
        // 把前面的12放在X中 然后把后面的21 通过反向取值再拼接的方式来保存在re中   re = 12
        // 第一次循环  re = 1 (获取到最后一位)  x = 122
        // 第二次循环  re = 1 * 10 + 2 = 12   x = 12
        //最后就进行判断 返回
        while (x > reversed) {
            reversed = reversed * 10 + x % 10;
            //每次都把最后一位的数给排除出去
            x /= 10;
        }
        return x == reversed || x == reversed / 10;
    }