phpで https://leetcode.com/problems/combination-sum/ を実装しようとしています。
php
1class Solution { 2 /** 3 * @param Integer[] $candidates 4 * @param Integer $target 5 * @return Integer[][] 6 */ 7 function combinationSum($candidates, $target) { 8 $results = []; 9 function combinationSearcher($sum,$currentArray,$candidators,$target){ 10 if($sum === $target){ 11 return array_push($results,$currentArray); 12 } 13 if($sum > $target){ 14 return ; 15 } 16 foreach($candidators as $candidate){ 17 if($currentArray[count($currentArray)-1] <= $candidate || !$currentArray[count($currentArray)-1]){ 18 $copiedCurAr = $currentArray; 19 $copiedCurAr[] = $candidate; 20 $summary = 0; 21 foreach($copiedCurAr as $num){ 22 $summary += $num; 23 } 24 combinationSearcher($summary,$curAr,$candidators,$target); 25 } 26 } 27 } 28 combinationSearcher(0,[],$candidates,$target); 29 return $results; 30 } 31}
結果は[]となり、おそらく関数combinationSearcherに$resultが参照渡しされていないからだろうと思い以下のようなコードを書いたのですが、PHP Fatal error: Cannot redeclare combinationSum() (previously declared in solution.php:10) in solution.phpというエラーが出てしまいます。
php
1class Solution { 2 /** 3 * @param Integer[] $candidates 4 * @param Integer $target 5 * @return Integer[][] 6 */ 7 function combinationSum($candidates, $target) { 8 $results = []; 9 function combinationSearcher($sum,$currentArray,$candidators,$target,&$results){ //変更 ここでエラー 10 if($sum === $target){ 11 return array_push($results,$currentArray); 12 } 13 if($sum > $target){ 14 return ; 15 } 16 foreach($candidators as $candidate){ 17 if($currentArray[count($currentArray)-1] <= $candidate || !$currentArray[count($currentArray)-1]){ 18 $copiedCurAr = $currentArray; 19 $copiedCurAr[] = $candidate; 20 $summary = 0; 21 foreach($copiedCurAr as $num){ 22 $summary += $num; 23 } 24 combinationSearcher($summary,$curAr,$candidators,$target,$results); //変更 25 } 26 } 27 } 28 combinationSearcher(0,[],$candidates,$target,$results); //変更 29 return $results; 30 } 31} 32
どのようにすれば正しい結果が得られるでしょうか。
また、その他のロジックの部分はデバックしたところあっていました。
あなたの回答
tips
プレビュー