PHP程式:計算沒有連續1的二進位制字串個數


什麼是計算沒有連續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。

從以上分析可以看出,長度為3且沒有連續1的有效二進位制字串有4個。

PHP程式:計算沒有連續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 "Number of binary strings without consecutive 1's: " . $count;

?>

輸出

Number of binary strings without consecutive 1's: 13

程式碼解釋

這段PHP程式碼定義了一個名為`countBinaryStrings`的函式,該函式使用動態規劃計算長度為$n且沒有連續1的二進位制字串的個數。它用基本情況$dp[0] = 1$dp[1] = 2初始化一個數組$dp,分別表示長度為0和1的字串的個數。然後,它使用迴圈來填充長度2到$n的剩餘計數,方法是將長度$i - 1$i - 2的計數相加。最後,它返回長度為$n的計數並將其打印出來。在這個具體的例子中,程式碼計算長度為5的沒有連續1的二進位制字串的個數,並顯示結果。

方法二

<?php
// PHP program to count all distinct
// binary stringswithout two
// consecutive 1's

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];
}

	// Driver Code
	echo "Number of binary strings without consecutive 1's: " . countStrings(5) ;

?>

輸出

Number of binary strings without consecutive 1's: 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的二進位制字串的準確計數,它們之間的選擇可能取決於特定的要求和效能考慮。

更新於:2023年8月1日

95 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告