JIAKAOBO

LeetCode

venmo
wechat

感谢赞助!

  • ㊗️
  • 大家
  • offer
  • 多多!

Problem

Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values.

Example 1:

Input: n = 5
Output: true
Explanation: The binary representation of 5 is: 101

Example 2:

Input: n = 7
Output: false
Explanation: The binary representation of 7 is: 111.

Example 3:

Input: n = 11
Output: false
Explanation: The binary representation of 11 is: 1011.

Constraints:

  • $1 <= n <= 2^{31} - 1$

Code

n           1 0 1 0 1 0 1 0
n >> 1      0 1 0 1 0 1 0 1
n ^ n>>1    1 1 1 1 1 1 1 1

不能用&, 比如n=4时, 就不成立

n           1 1 1 1 1 1 1 1
n + 1     1 0 0 0 0 0 0 0 0
n & (n+1)   0 0 0 0 0 0 0 0
class Solution {
    public boolean hasAlternatingBits(int n) {
        n = n ^ (n>>1);
        return (n & n+1) == 0;
    }
}