📌  相关文章
📜  计算没有连续 1 的二进制字符串的数量(1)

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

计算没有连续 1 的二进制字符串的数量

介绍

给定一个整数n,我们需要计算长度为n的二进制字符串中,没有连续1的字符串数量。

例如: 当n = 3时,长度为3的二进制字符串有:000、001、010、011、100、101、110、111,其中没有连续1的二进制字符串有:000、001、010、100、101,数量为5。

思路

假设有一个长度为n的没有连续1的二进制字符串,将其补零成长度为n+1的字符串,有以下两种情况:

  1. 在末尾加上一个0,仍然没有连续1;
  2. 在末尾加上一个1,此时倒数第二位必须是0,否则就有连续1了。

根据上述思路,我们可以得出递推公式 f(n) = f(n-1) + f(n-2),其中 f(n) 表示长度为n的没有连续1的二进制字符串数量。

代码
def findMaxConsecutiveOnes(n: int) -> int:
    a, b = 1, 1
    for i in range(2, n+1):
        a, b = b, a + b
    return b
复杂度分析
  • 时间复杂度:O(n),需要计算从 2 到 n 的所有情况。
  • 空间复杂度:O(1),只需要用两个变量来保存中间结果。