Combination
https://leetcode.com/problems/combinations/
整形n,给定一个k,求n个数字里面k个组合
res记录最终结果,out记录单次结果(res是out的组合),在组合过程中,从1到n遍历数字,每次的结果都保存到out,只要out的长度满足了k,则表明找到了一个结果,回溯到下一个继续迭代。下图比较好的能说明整个迭代的过程
![](https://img.haomeiwen.com/i7397908/f978e5f0db712399.png)
/**
* combine
* @param $n
* @param $k
* @return array
*/
function combine($n, $k) {
$out = [];
$res = [];
$this->combineHelper($n, $k, 1, $out, $res);
return $res;
}
/**
* combineHelper
* @param $n
* @param $k
* @param $level
* @param $out
* @param $res
* @return void
* @brief 这个函数的定义:对于n和k,找到level到n的所有满足条件的组合,并放在res中
*/
function combineHelper($n, $k, $level, &$out, &$res) {
if (count($out) == $k) {
$res[] = $out;
return;
}
for ($i = $level; $i <= $n; $i++) {
$out[] = $i;
$this->combineHelper($n, $k, $i+1, $out, $res);
array_pop($out);
}
}
网友评论