PHP 程序:计算不含连续 1 的二进制字符串的数量

phpserver side programmingprogramming更新于 2025/8/29 8:37:17

什么是"计算不含连续 1 的二进制字符串的数量"?

让我们通过一个例子来解释计算不含连续 1 的二进制字符串的数量。

示例

假设我们要计算长度为 3 且不包含连续 1 的二进制字符串的数量。二进制字符串是仅由 0 和 1 组成的字符串。

长度为 3 的二进制字符串可能有:000、001、010、011、100、101、110 和 111。

但是,我们只需要计算那些不含连续 1 的二进制字符串。因此,我们需要从计数中排除字符串 011、101 和 111。

让我们分析一下剩下的二进制字符串:

  • 000:这是一个有效字符串,因为它没有连续的 1。

  • 001:这是一个有效字符串,因为它没有连续的 1。

  • 010:这是一个有效字符串,因为它没有连续的 1。

  • 100:这是一个有效字符串,因为它没有连续的 1。

  • 110:这是一个无效字符串,因为它有连续的 1。

从以上分析中,我们可以看出,有 4 个长度为 3 且不包含连续 1 的有效二进制字符串1。

PHP 程序计算不含连续 1 的二进制字符串的数量

方法 1 - 使用动态规划

示例

<?php
function countBinaryStrings($n) {
   $dp = array();
   $dp[0] = 1;
   $dp[1] = 2;

   for ($i = 2; $i <= $n; $i++) {
      $dp[$i] = $dp[$i - 1] + $dp[$i - 2];
   }

   return $dp[$n];
}

$n = 5; // Number of digits in the binary string
$count = countBinaryStrings($n);
echo "不包含连续 1 的二进制字符串的数量:" . $count;

?>

输出

不包含连续 1 的二进制字符串的数量:13

代码说明

这段 PHP 代码定义了一个名为 countBinaryStrings 的函数,该函数使用动态规划计算长度为 $n 且不包含连续 1 的二进制字符串的数量。它初始化一个数组 $dp,其基本情况为 $dp[0] = 1 和 $dp[1] = 2,分别表示长度为 0 和 1 的字符串的数量。然后,它使用循环将长度 $i - 1 和 $i - 2 的计数相加,从而填充长度 2 到 $n 的剩余计数。最后,它返回长度 $n 的计数并打印出来。在这个具体示例中,代码计算长度为 5 的二进制字符串中不包含连续 1 的数量,并显示结果。

方法 2

<?php
// 用于计数所有不同的
// 不包含两个
// 连续 1 的二进制字符串的 PHP 程序

function countStrings($n)
{
	$a[$n] = 0;
	$b[$n] = 0;
	$a[0] = $b[0] = 1;
	for ($i = 1; $i < $n; $i++)
	{
		$a[$i] = $a[$i - 1] +
				$b[$i - 1];
		$b[$i] = $a[$i - 1];
	}
	return $a[$n - 1] +
		$b[$n - 1];
}

	// 驱动代码
	echo "不包含连续 1 的二进制字符串的数量:" . countStrings(5) ;

?>

输出

不包含连续 1 的二进制字符串的数量:13

代码说明

此 PHP 代码计算长度为 $n 且不包含两个连续 1 的不同二进制字符串的数量。它定义了两个数组 $a 和 $b,用于存储计数。基本情况设置为 $a[0] = $b[0] = 1。然后,使用循环计算长度从 1 到 $n-1 的计数。长度 $i 的计数是通过将数组 $a 中长度 $i-1 的计数与数组 $b 中长度 $i-1 的计数相加得出的。此外,数组 $b 中长度 $i 的计数是通过数组 $a 中长度 $i-1 的计数得出的。最后,代码返回数组 $a 中长度 $n-1 的计数与数组 $b 中长度 $n-1 的计数之和,表示不包含连续 1 的二进制字符串的总数。在此特定示例中,代码计算长度为 5 的计数并显示结果。

结论

总而言之,第一种方法利用动态规划,使用基准条件初始化一个数组,并迭代计算更大长度的计数。它通过将前两个长度的计数相加来高效地计算结果。第二种方法采用更简单的方法,使用两个数组存储计数,并根据前一个长度的计数迭代更新它们。它直接计算总计数,而无需分别对两个数组求和。这两种方法都能为没有连续 1 的二进制字符串提供准确的计数,具体选择哪种方法取决于具体需求和性能考虑。


相关文章