php回溯算法計算組合總和的實例代碼
給定一個數(shù)組 candidates 和一個目標(biāo)數(shù) target ,找出 candidates 中所有可以使數(shù)字和為 target 的組合。
candidates 中的每個數(shù)字在每個組合中只能使用一次。
說明所有數(shù)字(包括目標(biāo)數(shù))都是正整數(shù)。 解集不能包含重復(fù)的組合。
實例輸入:
candidates = [10,1,2,7,6,1,5], target = 8,
所求解集為:
[[1, 7],[1, 2, 5],[2, 6],[1, 1, 6]]
解題思路直接參考回溯算法團(tuán)滅排列/組合/子集問題。
代碼class Solution { /** * @param Integer[] $candidates * @param Integer $target * @return Integer[][] */ public $res = []; function combinationSum2($candidates, $target) {sort($candidates); // 排序$this->dfs([], $candidates, $target, 0);return $this->res; } function dfs($array, $candidates, $target, $start) {if ($target < 0) return;if ($target === 0) { $this->res[] = $array; return;}$count = count($candidates);for ($i = $start; $i < $count; $i++) { if ($i !== $start && $candidates[$i] === $candidates[$i - 1]) continue; $array[] = $candidates[$i]; $this->dfs($array, $candidates, $target - $candidates[$i], $i + 1);//數(shù)字不能重復(fù)使用,需要+1 array_pop($array); }}
實例擴(kuò)展:
<?php/* * k = 2x + y + 1/2z 取值范圍 * 0 <= x <= 1/2k * 0 <= y <= k * 0 <= z < = 2k * x,y,z最大值 2k */$daMi = 100;$result = array();function isOk($t,$daMi,$result){/*{{{*/ $total = 0; $hash = array(); $hash[1] = 2; $hash[2] = 1; $hash[3] = 0.5; for($i=1;$i<=$t;$i++) { $total += $result[$i] * $hash[$i]; } if( $total <= $daMi) { return true; } return false;}/*}}}*/function backtrack($t,$daMi,$result){/*{{{*/ //遞歸出口 if($t > 3) { //輸出最優(yōu)解 if($daMi == (2 * $result[1] + $result[2] + 0.5 * $result[3])) { echo '最優(yōu)解,大米:${daMi},大牛:$result[1],中牛: $result[2],小牛:$result[3]n'; } return; } for($i = 0;$i <= 2 * $daMi;$i++) { $result[$t] = $i; //剪枝 if(isOk($t,$daMi,$result)) { backtrack($t+1,$daMi,$result); } $result[$t] = 0; }}/*}}}*/backtrack(1,$daMi,$result);?>
到此這篇關(guān)于php回溯算法計算組合總和的實例代碼的文章就介紹到這了,更多相關(guān)php回溯算法計算組合總和的方法內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. ASP基礎(chǔ)知識Command對象講解2. ASP.NET MVC通過勾選checkbox更改select的內(nèi)容3. JavaScrip簡單數(shù)據(jù)類型隱式轉(zhuǎn)換的實現(xiàn)4. 解決ajax請求后臺,有時收不到返回值的問題5. jsp+mysql實現(xiàn)網(wǎng)頁的分頁查詢6. javascript xml xsl取值及數(shù)據(jù)修改第1/2頁7. ASP中實現(xiàn)字符部位類似.NET里String對象的PadLeft和PadRight函數(shù)8. XHTML 1.0:標(biāo)記新的開端9. JSP 中request與response的用法詳解10. asp知識整理筆記4(問答模式)
