📜  1到n位数字,二进制表示中没有连续的1(1)

📅  最后修改于: 2023-12-03 15:29:09.938000             🧑  作者: Mango

题目介绍

在二进制表示中,如果一个数的任意两个相邻的数字都为1,则称这个数包含连续的1。给定一个正整数n,求出所有n位二进制数中没有连续1的数的个数。

解题思路

我们可以先以小数据(例如n=1,2,3,4)为例,手动枚举不包含连续1的数字的个数。我们发现,当n>=3时,一个n位二进制数不包含连续1的数的个数可以通过其n-1位二进制数的情况来推得。

假设一个n-1位二进制数不包含连续1的个数为f(n-1),那么一个n位二进制数不包含连续1的个数可以通过以下方式来计算:

  • 若要在第i位填入一个0,则可以在第i-1位填0或1,此时0和1的个数均为f(n-2);
  • 若要在第i位填入一个1,则只能在第i-1位填0,此时0的个数为f(n-1)。

综上,我们可以得到以下递推公式:

f(n) = f(n-1) + f(n-2)

根据此公式,我们可以推出n位二进制数不包含连续1的数的个数为f(n)。

代码实现

下面是一个Python实现的例子,其中使用了一个数组dp来存储每个n位数不包含连续1的数的个数。

def findIntegers(n: int) -> int:
    dp = [0] * (n + 1)
    dp[0], dp[1] = 1, 2
    for i in range(2, n + 1):
        dp[i] = dp[i - 1] + dp[i - 2]
    return dp[n]

参考资料