不含連續1的非負整數

2021-09-25 11:55:15 字數 656 閱讀 5580

給定乙個正整數 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

思路:不存在連續1的數字裡面,1的後一位必定是0

所以我們把這個數字右移一位,然後和自身位與的結果必定是0

連續1的組合都是源自兩個 11

所以我們碰到11***  的時候就把後面的數字全部pass,

怎麼處理呢?

比如我們遇到了1100    

就需要pass掉1100 1101 1110 1111    

一共4個數字,其實就是第兩位能構成的數字個數

也就是100,所以我們 還是把這個數字右移一位,然後和自身位與,就可以得到100

class solution 

cout<}

return ans;

}};

任意非負整數,求1 n之間含有1的整數的個數

題目描述 求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數區間中1出現的次數。解析 1...

100 以內的非負整數的加法計算

問題 kiki今年5歲了,已經能夠認識100以內的非負整數,並且並且能夠進行 100 以內的非負整數的加法計算。不過,bobo老師發現kiki在進行大於等於100的正整數的計算時,規則如下 只保留該數的最後兩位,例如 對kiki來說1234等價於34 如果計算結果大於等於 100,那麼kiki也僅保...

求n個連續自然數之和為乙個非負整數的陣列

def find combinations num n int num 0.5 這裡直接開根號,縮小迴圈範圍 res 前可以轉化成中間項的倍數,所以下面for迴圈求得是中間項的值 for i in range 2 n 1 if num i 0 mid 01 i 中間數 mid 02 int num ...