组合
LeetCode题目链接:77. 组合 - 力扣(LeetCode)
难度:中等
分析
本题属于典型的递归回溯的题型,遍历给定数组,递归回溯组合出所有可能的组合即可
注意:组合需要进行去重(组成元素相同但是顺序不同仍然属于同种组合)
思路
- 遍历数组,加入临时结果集(注意去重的判断逻辑)
- 递归遍历数组
- 临时结果集回溯后继续遍历
递归结束条件:当临时结果集中的元素个数符合条件时即遍历结束,加入最终结果集并退出递归
点我展开
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| func recurve(idx int, n int, k int, cur *[]int, res *[][]int) { if len(*cur) == k { tmp := make([]int, len(*cur)) copy(tmp, *cur) *res = append(*res, tmp) return } for i := idx + 1; i <= n; i++ { *cur = append(*cur, i) recurve(i, n, k, cur, res) *cur = (*cur)[:len(*cur)-1] } }
func Combine(n int, k int) [][]int { res := make([][]int, 0) cur := make([]int, 0, k) recurve(0, n, k, &cur, &res) return res }
|
提交
参考资料
代码随想录