大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
- 位运算
- 回文数判断
题目解答方法的文字分析
该题要求判断一个整数的二进制表示是否为回文数,并且需要考虑符号位。我们可以按以下步骤解答该问题:
- 确定整数的位数,由于每一个整型的编码都是32位二进制数,我们可以设定一个常量
bitCount
为32。 - 使用位运算逐位判断整数的二进制表示是否为回文数。
- 从整数的最高位和最低位开始,逐位比较对应位置上的值是否相等。
- 如果出现不相等的情况,说明不是回文数,返回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; } };