import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param x int整型
     * @return bool布尔型
     */
    public boolean isPalindromeNumberIII (int x) {
        // write code here
        int[] a = new int[32];
        Arrays.fill(a, 0);

        if (x < 0) {
            a[0] = 1;
            x += Math.pow(2, 31);
        }

        for (int i = 1; i < a.length; i++) {
            a[i] = (int) (x / Math.pow(2, 31 - i));
            x -= a[i] * Math.pow(2, 31 - i);
        }

        for (int i = 0; i < a.length; i++) {
            if (a[i] != a[a.length - 1 - i]) {
                return false;
            }
        }

        return true;
    }
}

这个题目涉及到以下知识点

  1. 二进制表示和运算
  2. 整数溢出处理
  3. 循环遍历
  4. 数组操作
  5. 数学函数API: pow 或 Math.pow进行指数运算。

代码的文字解释如下:

  • 如果输入整数 x 为负数,将其转换为非负数,并标记符号位为1,以便在数组中还原补码表示。
  • 使用数组 a 存储整数的二进制表示,数组的每个元素对应一个二进制位。
  • 通过循环,将整数的二进制表示逐位存储在数组中。
  • 使用循环遍历数组,对数组中的二进制位进行比较,从最高位到最低位,判断是否是回文数的特征。
  • 如果有不一致的地方,说明不是回文数,返回 false。
  • 如果所有位都一致,说明是回文数,返回 true。