源题目
https://leetcode-cn.com/problems/combinations/
77. 组合
难度中等667
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
示例 1:
输入:n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
示例 2:
输入:n = 1, k = 1 输出:[[1]]
提示:
- 1 <= n <= 20
- 1 <= k <= n
通过次数200,908
提交次数260,823
class Solution {
/**
* @param Integer $n
* @param Integer $k
* @return Integer[][]
*/
function combine($n, $k) {
$ret = [];
if($n<1 || $k<1) return $ret;
$curr = [];
$this->combineCore(1, $n, $k, $curr, $ret);
return $ret;
}
// 回溯
function combineCore($start, $n, $k, &$curr, &$ret){
$len = count($curr);
if($len == $k) array_push($ret, $curr);// 当前长度达到k
for ($i = $start; $i < $n+1; ++$i) {
array_push($curr, $i);; // 选取i位置元素
$this->combineCore($i+1, $n, $k, $curr, $ret);
array_pop($curr); // 恢复
}
}
}