1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| class Solution { public int findIntegers(int n) {
int[] dp = new int[33]; dp[1] = 1; dp[2] = 2;
for (int i = 3; i <= 32; i++) { dp[i] = dp[i - 1] + dp[i - 2]; }
int preBit = 0, res = 0; for (int i = 30; i >= 0; i--) { int val = 1 << i; if ((n & val) != 0) { res += dp[i + 1];
if (preBit == 1) { return res; }
preBit = 1; } else {
preBit = 0; }
if (i == 0) { res++; } }
return res; } }
|
References
600. Non-negative Integers without Consecutive Ones