Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values.
Example 1:
Input: 5 Output: True Explanation: The binary representation of 5 is: 101
Example 2:
Input: 7 Output: False Explanation: The binary representation of 7 is: 111.
Example 3:
Input: 11 Output: False Explanation: The binary representation of 11 is: 1011.
Example 4:
Input: 10 Output: True Explanation: The binary representation of 10 is: 1010.
参加了LC一周一度的编程大赛,结果。。。并不重要。
这个题当时想法是转换成字符串,再判断是不是回文字符串,但是发现这样没有办法判断“11111” 这样的字符串,于是忽然想到了XO操作,从最右边开始判断。
直接上代码吧:
class Solution {
public:
bool hasAlternatingBits(int n) {
int last = n & 1;
n = n >> 1;
int flag = 1;
while (n != 0) {
int dig = n & 1;
n = n >> 1;
flag &= dig ^ last;
last = dig;
}
return flag == 1 ? true : false;
}
};
本文介绍了一种检查正整数是否具有交替位的方法。通过使用位操作而非字符串转换,该算法能有效判断相邻位是否始终不同。示例展示了输入5(二进制101)、10(二进制1010)等的情况。
361

被折叠的 条评论
为什么被折叠?



