24天【代码随想录算法训练营34期】第七章 回溯算法part01 ( ● 理论基础 ● 77. 组合 )

**理论基础 **

void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
        处理节点;
        backtracking(路径,选择列表); // 递归
        回溯,撤销处理结果
    }
}

77. 组合
为啥一定要result.append(path[:]),因为在python里面,如果result.append(path),就是加了path的指针,path后面发生什么变化,result也会随之发生变化
但是如果path[:],那就是直接复制粘贴

class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        result = []
        self.backtracking(n, k, 1, [], result)
        return result

    def backtracking(self, n, k, startingIndex, path, result):
        if len(path) == k:
            result.append(path[:])
            return
        for i in range(startingIndex, n+1):
            path.append(i)
            self.backtracking(n, k, i+1, path, result)
            path.pop()
posted @ 2024-04-13 18:24  MiraMira  阅读(15)  评论(0)    收藏  举报