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
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.
Solution
@数值型数组定义遇到很大问题,初始化需要注意语法问题
class Solution:
def findIntegers(self, num):
"""
:type num: int
:rtype: int
"""
count = 0
num_list = []
while num>0:
num_list += [num%2]
num = num//2
count += 1
zero = [0]*count
one = [0]*count
zero[0] = 1
one[0] = 1
for i in range(1, count):
zero[i] = zero[i-1] + one[i-1]
one[i] = zero[i-1]
ret = zero[count-1]+one[count-1]
for i in range(count-2, -1, -1):
if num_list[i]==1 and num_list[i+1]==1:
break
if num_list[i]==0 and num_list[i+1]==0:
ret -= one[i]
return ret