Golang | Leetcode Golang题解之第77题组合

题目:

题解:

Go 复制代码
func combine(n int, k int) (ans [][]int) {
	// 初始化
	// 将 temp 中 [0, k - 1] 每个位置 i 设置为 i + 1,即 [0, k - 1] 存 [1, k]
	// 末尾加一位 n + 1 作为哨兵
	temp := []int{}
	for i := 1; i <= k; i++ {
		temp = append(temp, i)
	}
	temp = append(temp, 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
}
相关推荐
元亓亓亓1 分钟前
LeetCode热题100--560.和为K的子数组(前缀和)--中等
算法·leetcode·职场和发展
ErizJ1 小时前
Golang|分布式索引架构
开发语言·分布式·后端·架构·golang
八股文领域大手子1 小时前
深入浅出限流算法(三):追求极致精确的滑动日志
开发语言·数据结构·算法·leetcode·mybatis·哈希算法
蒟蒻小袁3 小时前
力扣面试150题--K 个一组翻转链表
leetcode·链表·面试
许_安4 小时前
leetcode刷题日记——两数相加
算法·leetcode·职场和发展
关于不上作者榜就原神启动那件事6 小时前
力扣hot100,739每日温度(单调栈)详解
算法·leetcode·职场和发展
小卡皮巴拉6 小时前
【力扣刷题实战】丢失的数字
c++·算法·leetcode·位运算
{⌐■_■}7 小时前
【计网】认识跨域,及其在go中通过注册CORS中间件解决跨域方案,go-zero、gin
java·linux·开发语言·c++·中间件·golang·gin
ErizJ7 小时前
Golang|外观模式和具体逻辑
开发语言·golang·外观模式
ErizJ7 小时前
Golang | 集合求交
开发语言·后端·golang·集合·交集