大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点

  • 位运算
  • 回文数判断

题目解答方法的文字分析

该题要求判断一个整数的二进制表示是否为回文数,并且需要考虑符号位。我们可以按以下步骤解答该问题:

  1. 确定整数的位数,由于每一个整型的编码都是32位二进制数,我们可以设定一个常量bitCount为32。
  2. 使用位运算逐位判断整数的二进制表示是否为回文数。
  3. 从整数的最高位和最低位开始,逐位比较对应位置上的值是否相等。
  4. 如果出现不相等的情况,说明不是回文数,返回false。如果整个二进制表示都满足对应位置相等,说明是回文数,返回true。

需要注意的是,由于整数有符号,我们需要考虑符号位。在判断二进制回文时,我们可以忽略符号位,并只关注数据位的回文性。

举个例子,假设输入的整数为x = 9

  • 第一步,确定整数的位数为32。
  • 第二步,使用位运算逐位判断整数的二进制表示是否为回文数。
  • 第三步,逐位比较整数的二进制表示,得到1001,左边第一个bit和右边第一个bit相等,左边第二个bit和右边第二个bit相等,左边第三个bit和右边第三个bit相等,左边第四个bit和右边第四个bit相等。
  • 但这样不对 本题要求把前面的28个0也纳入考虑 所以应该是false

本题解析所用的编程语言

C++

完整且正确的编程代码

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param x int整型 
     * @return bool布尔型
     */
    bool isPalindromeNumberIII(int x) {
        // 确定整数的位数
        int bitCount = 32;
        
        // 逐位判断是否为回文数
        for (int i = 0; i < bitCount / 2; i++) {
            int leftBit = (x >> (bitCount - 1 - i)) & 1; // 获取最高位
            int rightBit = (x >> i) & 1; // 获取最低位
            
            // 判断对应位置上的值是否相等
            if (leftBit != rightBit)
                return false;
        }
        
        return true;
    }
};

您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!