Leetcode693. 交替位二進制數(位運算)

鏈接: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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章