四时宝库

程序员的知识宝库

Leetcode力扣算法题目——组合(力扣数组)

题目

给定两个整数 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;
    }
}

结果

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接