.
2019-06-13 吴亲库里 库里的深夜食堂
给定一个不重复的数组,返回它所有的子集,并且不能重复,这两周选择递归的标签其实刷的都是关于回溯法思想,只是实现方式用的是递归。
这些题目解释起来的原理都是回溯的解题思路,今天换个方式,画了个运行流程。一层一层的往下找,直到结束,退回一层,继续找,最终的顺序就是图上花的[][1][1,2][1,2,3][2,3]......好吧这图我都看不下去了,将就点,看代码。
/**
* @param Integer[] $nums
* @return Integer[][]
*/
function subsets($nums) {
$out=[];
$res=[];
$this->helper($nums,0,$out,$res);
return $res;
}
function helper($nums,$index,&$out,&$res){
array_push($res,$out);
for($i=$index;$i<count($nums);$i++){
array_push($out,$nums[$i]);
$this->helper($nums,$i+1,$out,$res);
array_pop($out);
}
}