侧边栏壁纸
  • 累计撰写 32 篇文章
  • 累计创建 38 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

9.回文数

一杯香梨
2023-02-02 / 0 评论 / 0 点赞 / 70 阅读 / 0 字

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/palindrome-number

分析
  1. 负数不是回文数
  2. 个位数是0的数不是回文数,0除外
  3. 数据范围:-2^31 ≤ x ≤ 2^31-1
解法1

数字转换字符串,将转换的字符串进行反转然后和原字符串比较。

class Solution {
    public boolean isPalindrome(int x) {
        String[] split = String.valueOf(x).split("");
        int size = split.length;
        String[] str = new String[size];
        for (int i = size - 1; i >= 0; i--) {
            str[Math.abs(size - i - 1)] = split[i];
        }
        return Arrays.toString(split).equals(Arrays.toString(str));
    }
}
解法2

反转数字然后比较,由于给出的数据范围是int.MAX,如果强行反转会导致溢出。但是可以换个思路,同样是反转数字,由于回文数的特殊的性质,我们将这个数字x进行‘分半’,如果这一半是回文数,那原来的数即使回文数。当数字x的长度为奇数的时候,中间的数反转后总是等于它本身,因此可以省略第一个数,当数字x的长度为偶数时,直接与另一半进行比较,若相等则为回文数。

class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }

        int reverse = 0;
        while (x > reverse) {
            reverse = x % 10 + reverse * 10;
            x = x / 10;
        }

        return x == reverse || x == reverse / 10;
    }
}
0

评论区