题目来源:https://leetcode.com
600. Non-negative Integers without Consecutive Ones
- Total Accepted: 1587
- Total Submissions: 6069
- Difficulty: Hard
- Contributors:
Given a positive integer n, find the number of non-negative integers less than or equal to n, whose binary representations do NOT containconsecutive 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
代码如下:
int findIntegers(int num) {
string str="";
while(num>0)str+=num%2+'0',num/=2;
int l=str.length();
vector<int> arr(l+1,1);
for(int i=2;i<=l;i++)arr[i]=arr[i-1]+arr[i-2];
int result=1,pre=0;
for(int i=l;i>=0;i--)
{
if(str[i-1]=='1')
{
result+=arr[i];
if(pre==1)break;
}
pre=str[i-1]=='1';
}
return result-pre;
}