首页 > 编程语言 >【代码随想录|回溯算法 77. 组合】

【代码随想录|回溯算法 77. 组合】

时间:2024-07-13 18:26:38浏览次数:10  
标签:int self 随想录 append 77 result 回溯 path backtracking

代码随想录|回溯算法 77. 组合,216.组合总和 III,17.电话号码的字母组合


python

一、77. 组合

内容
77. 组合

1.核心代码

代码如下(示例):

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, startIndex, path, result):
        if len(path) == k:
            result.append(path[:])
            return
        for i in range(startIndex, n - (k - len(path)) + 2):  # 优化的地方
            path.append(i)  # 处理节点
            self.backtracking(n, k, i + 1, path, result)
            path.pop()  # 回溯,撤销处理的节点

result.append(path[:])是浅拷贝。否则,因为通过append把path添加到result,是引用对象,所以后续path改变,result也会改变。而增加了[:]后,后续修改不会影响前面的引用了

2.输入输出

class Solution:
    def combine(self,n,k):
        result = []
        self.backtracking(n,k,1,[],result)
        return result
    def backtracking(self,n,k,startIndex,path,result):
        if len(path) == k:
            result.append(path[:])
            return
        for i in range(startIndex, n-(k-len(path))+2):
            path.append(i)
            self.backtracking(n,k,i+1,path,result)
            path.pop()

if __name__=="__main__":
    n=int(input())
    k=int(input())
    solution=Solution()
    result=solution.combine(n,k)
    print(result)

3.问题

combine 方法调用了 backtraversal 方法,而 backtraversal 方法是定义在类内的,因此需要通过 self 进行调用。
backtraversal 方法的签名中缺少 self。没有 self 的话,方法无法正确绑定到实例上,也无法访问实例变量和方法。

总结

输入输出

标签:int,self,随想录,append,77,result,回溯,path,backtracking
From: https://blog.csdn.net/daisyholly/article/details/140402662

相关文章

  • 「代码随想录算法训练营」第十天 | 栈与队列 part2
    150.逆波兰表达式求值题目链接:https://leetcode.cn/problems/evaluate-reverse-polish-notation/题目难度:中等文章讲解:https://programmercarl.com/0150.逆波兰表达式求值.html视频讲解:https://www.bilibili.com/video/BV1kd4y1o7on题目状态:多次修改bug后通过个人思路:......
  • 代码随想录——不同路径(Leetcode LCR98)
    题目链接动态规划classSolution{publicintuniquePaths(intm,intn){int[][]dp=newint[m][n];//从(0,0)到(i,0)路径只有一条for(inti=0;i<m;i++){dp[i][0]=1;}//从(0,0)到(0,j)路......
  • 代码随想录——不同路径Ⅱ(Leetcode 63)
    题目链接动态规划classSolution{publicintuniquePathsWithObstacles(int[][]obstacleGrid){intm=obstacleGrid.length;intn=obstacleGrid[0].length;int[][]dp=newint[m][n];//遇到障碍则从(0,0)到达......
  • 代码随想录——监控二叉树(Leetcode968)不会
    题目链接贪心/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.val=val;}*TreeNode(intval,TreeNodeleft,Tr......
  • 代码随想录day22 组合 | 组合总和III | 电话号码的字母组合 |
    组合组合解题思路利用回溯算法来暴力枚举所有可能性。这里利用了代码随想录的解题模板即可。剪枝方面,由于某些情况下(如k=n)不需要遍历所有的可能性,因此我们要适当修改一下每次循环遍历的元素个数来进行优化知识点回溯心得如果知道如何将此类问题转换为一个n叉树,就会很......
  • 代码随想录算法训练营第八天| leetcode 344、541、卡码网54
    反转字符串 leetcode344classSolution{public:voidreverseString(vector<char>&s){intindex1=0,index2=s.size()-1;chartmp;while(index1<index2){tmp=s[index1];s[index1]=s[index2];......
  • 回溯-子集型
    参考:回溯算法套路①子集型回溯【基础算法精讲14】ps:0-1背包也是一种子集型回溯  注意:递归参数中的i不是第i个,而是下标大于等于i的这部分 例题: classSolution:deff1(self,nums):n=len(nums)ifn==0:return[......
  • 「代码随想录算法训练营」第九天 | 栈与队列 part1
    232.用栈实现队列题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/题目难度:简单文章讲解:https://programmercarl.com/0232.用栈实现队列.html视频讲解:https://www.bilibili.com/video/BV1nY4y1w7VC题目状态:看视频讲解后通过思路:通过两个栈来实现队......
  • 代码随想录算法训练营第10天 | 复习队列和栈
    2024年7月12日题232.用栈实现队列两边倒即可,要出队列就倒到右边去,然后再回来。classMyQueue{Stack<Integer>s1;Stack<Integer>s2;intsize;publicMyQueue(){s1=newStack<>();s2=newStack<>();size=0;}......
  • 代码随想录算法训练营Day22 | Leetcode 77. 组合 | 216.组合总和III | 17.电话号码的
    今日任务77.组合题目链接:https://leetcode.cn/problems/combinations/description/题目描述:CodeclassSolution{vector<vector<int>>ans;vector<int>path;public:vector<vector<int>>combine(intn,intk){//intst......