美文网首页编什么程
Leetcode力扣算法题目——组合

Leetcode力扣算法题目——组合

作者: 沙蒿同学 | 来源:发表于2019-08-10 17:36 被阅读1次

题目

给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。

示例:
输入: n = 4, k = 2
输出:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

PHP代码实现

array_slice 从数组中取出一段

class Solution {

    /**
     * @param Integer $n
     * @param Integer $k
     * @return Integer[][]
     */
    function combine($n, $k) {
        $arr = range(1,$n);
        return self::combination($arr, $k);
    }
    
    function combination($st_array, $m)
    {
        $re_array = array();
        $n = count($st_array);
        if ($m <= 0 || $m > $n) {
            return $re_array;
        }
        for ($i = 0; $i < $n; $i++) {
            $t = array($st_array[$i]);
            if ($m == 1) {
                $re_array[] = $t;
            } else {
                $item_array = array_slice($st_array, $i + 1);
                $c          = self::combination($item_array, $m - 1);
                foreach ($c as $v) {
                    $re_array[] = array_merge($t, $v);
                }
            }
        }
        return $re_array;
    }
}

结果

image.png

相关文章

网友评论

    本文标题:Leetcode力扣算法题目——组合

    本文链接:https://www.haomeiwen.com/subject/tvnrjctx.html