Non-negative Integers without Consecutive Ones

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值