源题目

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

  1. class Solution {
  2. /**
  3. * @param Integer $n
  4. * @param Integer $k
  5. * @return Integer[][]
  6. */
  7. function combine($n, $k) {
  8. $ret = [];
  9. if($n<1 || $k<1) return $ret;
  10. $curr = [];
  11. $this->combineCore(1, $n, $k, $curr, $ret);
  12. return $ret;
  13. }
  14. // 回溯
  15. function combineCore($start, $n, $k, &$curr, &$ret){
  16. $len = count($curr);
  17. if($len == $k) array_push($ret, $curr);// 当前长度达到k
  18. for ($i = $start; $i < $n+1; ++$i) {
  19. array_push($curr, $i);; // 选取i位置元素
  20. $this->combineCore($i+1, $n, $k, $curr, $ret);
  21. array_pop($curr); // 恢复
  22. }
  23. }
  24. }