77. 组合
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
1 2 3 4 5 6 7 8 9 10 11 12 | class Solution: def combine( self , n: int , k: int ) - > List [ List [ int ]]: ans = [] def completePermutation(tmp, idx): if len (tmp) = = k: ans.append(tmp[:]) for i in range (idx, n + 1 ): tmp.append(i) completePermutation(tmp, i + 1 ) tmp.pop() completePermutation([], 1 ) return ans |
拓展:
回溯算法函数dfs
第一个参数cur表示临时答案,在供选数组里取第一个元素,对于它,我们有两种选择,选 或者 不选
第二个参数nums表示供选的数组,
子集:
1 2 3 4 5 6 7 8 9 10 | def subsets( self , nums: List [ int ]) - > List [ List [ int ]]: res = [] def dfs(cur,nums): if not nums: res.append(cur) return dfs(cur + [nums[ 0 ]],nums[ 1 :]) dfs(cur,nums[ 1 :]) dfs([],nums) return res |
组合:
组合不过是在所有子集里,筛选出符合要求题目要求的,即只保留长度等于K的子集而已。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def combine( self , n: int , k: int ) - > List [ List [ int ]]: res = [] nums = list ( range ( 1 ,n + 1 )) def dfs(cur,nums): if not nums : if len (cur) = = k: res.append(cur) return dfs(cur + [nums[ 0 ]],nums[ 1 :]) dfs(cur,nums[ 1 :]) dfs([],nums) return res |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步