列表

详情


剑指 Offer II 080. 含有 k 个元素的组合

给定两个整数 nk,返回 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]]

 

提示:

 

注意:本题与主站 77 题相同: https://leetcode.cn/problems/combinations/

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<vector<int>> combine(int n, int k) { } };

golang 解法, 执行用时: 4 ms, 内存消耗: 6.2 MB, 提交时间: 2022-08-05 15:39:59

func combine(n int, k int) (ans [][]int) {
	// 末尾加一位 n + 1 作为哨兵
	temp := make([]int, k+1)
	for i := 1; i <= k; i++ {
		temp[i-1] = i
	}
	temp[k] = n+1

	for j := 0; j < k; {
		comb := make([]int, k)
		copy(comb, temp[:k])
		ans = append(ans, comb)
		// 寻找第一个 temp[j] + 1 != temp[j + 1] 的位置 t
		// 我们需要把 [0, t - 1] 区间内的每个位置重置成 [1, t]
		for j = 0; j < k && temp[j]+1 == temp[j+1]; j++ {
			temp[j] = j + 1
		}
		// j 是第一个 temp[j] + 1 != temp[j + 1] 的位置
		temp[j]++
	}
	return
}

上一题