77. 组合
题目链接:LeetCode - The World's Leading Online Programming Learning Platform
题目链接/文章讲解:代码随想录
视频讲解:带你学透回溯算法-组合问题(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili
剪枝操作:带你学透回溯算法-组合问题的剪枝操作(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili
解题思路:
采用回溯
设置一个stack path 和一个结果res
定义回溯(n,k,start_index 传入start_index的原因是在回溯时我们需要知道他应该从哪一个起始值进行递归),首先设置basic condition 如果path长度为k时,把path放进res。 如果不合符条件的话 就进入回溯中的for loop,从start_index到n-1(注意我们可以做减枝操作)循环,将当前i append进path,做回溯递归,注意此时start_index是i+1,是从我们当前i的后一位递归。当递归到底返回后 要注意回溯 也就是pop我们的path。
最后执行我们的function并return我们res
class Solution(object):
def combine(self, n, k):
"""
:type n: int
:type k: int
:rtype: List[List[int]]
"""
path=[]
res=[]
def backtracking(n,k,start_index):
if len(path) == k:
res.append(path[:])
return
for i in range(start_index,n-(k-len(path))+2):
path.append(i)
backtracking(n,k,i+1)
path.pop()
backtracking(n,k,1)
return res
该文章主要讲解了LeetCode上的77题——组合问题,通过回溯算法进行求解。作者详细介绍了如何设置路径(path)和结果(res),以及回溯函数(backtracking)的实现,包括基本条件判断、for循环中的剪枝操作和递归过程。在回溯过程中,当路径长度等于目标k时,将路径添加到结果中,否则在循环中尝试所有可能,并在递归返回时执行路径回溯。
523

被折叠的 条评论
为什么被折叠?



