Ai
1 Star 0 Fork 0

徐长贺/Leetcode

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
_600.java 1.49 KB
一键复制 编辑 原始数据 按行查看 历史
Fisher Coder 提交于 2019-07-27 22:56 +08:00 . refactor 600
package com.fishercoder.solutions;
/**
* 600. Non-negative Integers without Consecutive Ones
*
* Given a positive integer n, find the number of non-negative integers less than or equal to n, whose binary representations do NOT contain consecutive ones.
Example 1:
Input: 5
Output: 5
Explanation:
Here are the non-negative integers <= 5 with their corresponding binary representations:
0 : 0
1 : 1
2 : 10
3 : 11
4 : 100
5 : 101
Among them, only integer 3 disobeys the rule (two consecutive ones) and the other 5 satisfy the rule.
Note: 1 <= n <= 109
*/
public class _600 {
public static class Solution1 {
/**
* Credit: https://leetcode.com/articles/non-negative-integers-without-consecutive-ones/#approach-3-using-bit-manipulation-accepted
*/
public int findIntegers(int num) {
int[] f = new int[32];
f[0] = 1;
f[1] = 2;
for (int i = 2; i < f.length; i++) {
f[i] = f[i - 1] + f[i - 2];
}
int i = 30;
int sum = 0;
int prevBit = 0;
while (i >= 0) {
if ((num & (1 << i)) != 0) {
sum += f[i];
if (prevBit == 1) {
sum--;
break;
}
prevBit = 1;
} else {
prevBit = 0;
}
i--;
}
return sum + 1;
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/isulong/Leetcode.git
git@gitee.com:isulong/Leetcode.git
isulong
Leetcode
Leetcode
master

搜索帮助