当前位置: 面试刷题>> 组合(经典算法150题)


题目描述补充

题目:组合生成器

给定两个整数 nk,你的任务是编写一个函数来生成从 1n 的所有可能的 k 个数的组合,且组合中的数字不允许重复。

示例输入

  • n = 4
  • k = 2

示例输出

  • [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]

要求

  • 你可以使用递归或迭代的方法来解决问题。
  • 请为 PHP、Python 和 JavaScript 分别编写解决方案。

PHP 示例代码

function combine($n, $k) {
    $result = [];
    backtrack($result, [], 1, $n, $k);
    return $result;
}

function backtrack(&$result, $combination, $start, $n, $k) {
    if ($k == 0) {
        $result[] = $combination;
        return;
    }
    for ($i = $start; $i <= $n; $i++) {
        $combination[] = $i;
        backtrack($result, $combination, $i + 1, $n, $k - 1);
        array_pop($combination);
    }
}

// 测试代码
$n = 4;
$k = 2;
$output = combine($n, $k);
print_r($output);

Python 示例代码

def combine(n, k):
    def backtrack(start, path):
        if len(path) == k:
            result.append(path[:])
            return
        for i in range(start, n + 1):
            path.append(i)
            backtrack(i + 1, path)
            path.pop()

    result = []
    backtrack(1, [])
    return result

# 测试代码
n = 4
k = 2
output = combine(n, k)
print(output)

JavaScript 示例代码

function combine(n, k) {
    const result = [];

    function backtrack(start, path) {
        if (path.length === k) {
            result.push([...path]);
            return;
        }
        for (let i = start; i <= n; i++) {
            path.push(i);
            backtrack(i + 1, path);
            path.pop();
        }
    }

    backtrack(1, []);
    return result;
}

// 测试代码
const n = 4;
const k = 2;
const output = combine(n, k);
console.log(output);

文章融入逻辑

在发布到码小课网站的文章中,你可以这样引入题目和解决方案:


标题:组合生成器算法详解与实现

在编程面试中,组合生成器是一个常见的算法题目。给定两个整数 nk,我们需要生成从 1n 的所有可能的 k 个数的组合。今天,我们将通过 PHP、Python 和 JavaScript 三种语言来探讨这个问题,并展示如何实现它。

首先,我们来定义问题。假设我们有 n = 4k = 2,我们想要找出所有可能的组合,即 [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]

接下来,我们将通过回溯法来解决这个问题。回溯法是一种通过探索所有可能的候选解来找出所有解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化来撤销上一步的选择,并通过另一种方式继续试探。

现在,让我们分别看看在 PHP、Python 和 JavaScript 中如何实现这个算法。

(然后,你可以将上述三种语言的代码示例插入到文章中,并解释每段代码的作用。)


通过这样的方式,你可以在文章中既展示了算法的实现,又合理地融入了码小课网站的相关信息。

推荐面试题