【8.回文数】

22 阅读1分钟

题目

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

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

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

示例 1:

输入: x = 121
输出: true

题解

方式一:反转数组

public boolean isPalindrome(int x) {
    String str = String.valueOf(x);
    StringBuilder sb = new StringBuilder(str);
    // reverse方法用的反转byte数组的方式
    return str.equals(sb.reverse().toString());
}

==============反转数组
char[] c = new char[]{'a', 'a', 'b', 'b'};
int n = c.length - 1;
for (int j = (n-1) >> 1; j >= 0; j--) { // 从中点往起点遍历
    int k = n - j; // 对应的另一边下标
    // swap
    byte cj = c[j];
    c[j] = c[k];
    c[k] = cj;
}

方式二:双指针

public boolean isPalindrome(int x) {
    String str = String.valueOf(x);
    char[] c = str.toCharArray();
    int l = 0;
    int r = c.length - 1;
    while (l <= r) {
        if (c[l] != c[r]) {
            return false;
        }
        l++;
        r--;
    }
    return true;
}

方式三:反转数字

public boolean isPalindrome(int x) {
    if (x < 0 || (x % 10 == 0 && x != 0)) {
        return false;
    }
    int reverseNum = 0; // 反转后一半数字
    while (x > reverseNum) { // 当reverseNum <= x时说明已经反转一半了
        reverseNum = reverseNum * 10 + x % 10; // reverseNum加上x最后一位
        x /= 10; // x去掉最后一位
    }
    // 奇数个和偶数个都要考虑,奇数个reverseNum位数比x多一位
    return x == reverseNum || x == reverseNum / 10;
}

总结

算法:双指针,反转数组,数学模拟