693. 交替位二进制数

给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。

示例 1:

输入: 5
输出: True
解释:
5的二进制数是: 101

示例 2:

输入: 7
输出: False
解释:
7的二进制数是: 111

示例 3:

输入: 11
输出: False
解释:
11的二进制数是: 1011

示例 4:

输入: 10
输出: True
解释:
10的二进制数是: 1010

方法一:将给定数值的二进制数转化为对应的字符串,只要该字符串不存在两个相邻的字符相等,那么就满足条件。

class Solution {
public:
    bool hasAlternatingBits(int n) {
        string s = "";
        while( n ){
            string a = to_string(n%2);
            s = a + s;
            n /= 2;
        }
        for(int i=0; i<s.size();i++){
            if( s[i] == s[i+1] ){
                return false;
            }
        }
        return true;
    }
};

方法二:除以二,

class Solution {
public:
    bool hasAlternatingBits(int n) {
        int cur = n%2;
            n = n/2;
        while(n){
            if( cur == n%2 ){
                return false;
            }
            cur = n%2;
            n = n/2;
        }
        return true;
    }
};

猜你喜欢

转载自blog.csdn.net/hy971216/article/details/81016817