📅  最后修改于: 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的个数可以通过以下方式来计算:
综上,我们可以得到以下递推公式:
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]