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


### 题目描述补充 **题目:组合生成器** 给定两个整数 `n` 和 `k`,你的任务是编写一个函数来生成从 `1` 到 `n` 的所有可能的 `k` 个数的组合,且组合中的数字不允许重复。 **示例输入**: - `n = 4` - `k = 2` **示例输出**: - `[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]` **要求**: - 你可以使用递归或迭代的方法来解决问题。 - 请为 PHP、Python 和 JavaScript 分别编写解决方案。 ### PHP 示例代码 ```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 示例代码 ```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 示例代码 ```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); ``` ### 文章融入逻辑 在发布到码小课网站的文章中,你可以这样引入题目和解决方案: --- **标题:组合生成器算法详解与实现** 在编程面试中,组合生成器是一个常见的算法题目。给定两个整数 `n` 和 `k`,我们需要生成从 `1` 到 `n` 的所有可能的 `k` 个数的组合。今天,我们将通过 PHP、Python 和 JavaScript 三种语言来探讨这个问题,并展示如何实现它。 首先,我们来定义问题。假设我们有 `n = 4` 和 `k = 2`,我们想要找出所有可能的组合,即 `[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]`。 接下来,我们将通过回溯法来解决这个问题。回溯法是一种通过探索所有可能的候选解来找出所有解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化来撤销上一步的选择,并通过另一种方式继续试探。 现在,让我们分别看看在 PHP、Python 和 JavaScript 中如何实现这个算法。 (然后,你可以将上述三种语言的代码示例插入到文章中,并解释每段代码的作用。) --- 通过这样的方式,你可以在文章中既展示了算法的实现,又合理地融入了码小课网站的相关信息。
推荐面试题