给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。

示例 1:

输入:n = 5
输出:true
解释:5 的二进制表示是:101
示例 2:

输入:n = 7
输出:false
解释:7 的二进制表示是:111.
示例 3:

输入:n = 11
输出:false
解释:11 的二进制表示是:1011.

提示:

1 <= n <= 231 - 1


  1. class Solution {
  2. public boolean hasAlternatingBits(int n) {
  3. boolean flag0 = false, flag1 = false; //上一个是0还是1
  4. //交替出现
  5. while (n > 0) {
  6. if ((n & 1) == 1) {
  7. if (flag1) return false;
  8. flag1 = true; flag0 = false;
  9. } else {
  10. if (flag0) return false;
  11. flag0 = true; flag1 = false;
  12. }
  13. n >>= 1;
  14. }
  15. return true;
  16. }
  17. }

位运算

  1. class Solution {
  2. public boolean hasAlternatingBits(int n) {
  3. while (n > 0) {
  4. int u = n & 1;
  5. //跟前面一位进行比较
  6. if ((n >> 1 & 1) == u) return false;
  7. n >>= 1;
  8. }
  9. return true;
  10. }
  11. }