给定一个正整数 n,找出小于或等于 n 的非负整数中,其二进制表示不包含 连续的1 的个数。
示例 1:
输入: 5 输出: 5 解释: 下面是带有相应二进制表示的非负整数<= 5: 0 : 0 1 : 1 2 : 10 3 : 11 4 : 100 5 : 101 其中,只有整数3违反规则(有两个连续的1),其他5个满足规则。
说明: 1 <= n <= 109
Related Topics
先整个简单的直接dfs,在超时的边缘不断试探
class Solution {
    int max;
    int count = 1;
    public int findIntegers(int n) {
        max = n;
        dfs(1);
        return count;
    }
    public void dfs(int n){
        if(n > max)return;
        count++;
        if((n & 1)==1){
            dfs(n<<1);
        }else{
            dfs(n<<1);
            dfs((n<<1)+1);
        }
    }
}
						
发表评论