LeetCode题库77.组合——dfs典型解法,递归+回溯+剪枝

class Solution:
def combine(self, n: int, k: int):
nums=[x+1 for x in range(n)]
res,ans=[],[]
def dfs(nums:list[int]):
if len(ans)==k:
ans_copy=ans.copy()#复制,避免ans数组改变使res跟着改变
res.append(ans_copy)
return
for c,i in enumerate(nums[:n-(k-len(ans))+1]):
ans.append(i)
dfs(nums[c+1:])
ans.pop()
dfs(nums)
return res
try:
solution=Solution()
res=solution.combine(4,2)
print(res)
solution=Solution()
res=solution.combine(4,3)
print(res)
except:
print('error')
另一种解法:
class Solution:
def combine(self, n: int, k: int):
res,ans=[],[]
def dfs(n,k,start):
#if start==n-k+2:
# return
if len(ans)==k:
res.append(ans.copy())
return
for i in range(start,n+1):#若start大于n,range(n,n)不报错,直接返回,减少了实现难度。
ans.append(i)
dfs(n,k,i+1)
ans.pop()
dfs(n,k,1)
return res

浙公网安备 33010602011771号