鏈接:https://leetcode-cn.com/problems/binary-number-with-alternating-bits
給定一個正整數,檢查他是否爲交替位二進制數:換句話說,就是他的二進制數相鄰的兩個位數永不相等。
示例 1:
輸入: 5
輸出: True
解釋:
5的二進制數是: 101
示例 2:
輸入: 7
輸出: False
解釋:
7的二進制數是: 111
示例 3:
輸入: 11
輸出: False
解釋:
11的二進制數是: 1011
示例 4:
輸入: 10
輸出: True
解釋:
10的二進制數是: 1010
/* 思路
交替二進制數的規律: 偶數是基數的兩倍
找出給定正整數的位數,求出對應位數的 偶數交替二進制數、基數交替二進制數
給定正整數和交替二進制數相 & 判斷結果
// 思路二
逐位判斷, 交替flag
*/
bool hasAlternatingBits(int n){
// judge odd or even
int flag = 0;
if(1 == (n & 1)){ flag = 1; }
while(n > 0){
switch (flag) {
case 1 :
if(flag != (n & flag)){ return false; }
break;
case 0 :
if(flag != (n % 2)){ return false; }
break;
}
flag = !flag; //取反 則 符合交替
n = n / 2;
}
return true;
}