首页 > 其他分享 >LeetCode----回溯

LeetCode----回溯

时间:2023-06-08 20:47:13浏览次数:37  
标签:选择 used nums self backtrack ---- num 回溯 LeetCode

1 算法模板

for 选择 in 选择列表:
    # 做选择
    将该选择从选择列表移除
    路径.add(选择)
    backtrack(路径, 选择列表)
    # 撤销选择
    路径.remove(选择)
    将该选择再加入选择列表

2 代码示例

46. 全排列

class Solution:
    def __init__(self):
        self.res = []

    def backtrack(self, used, nums, num):
        # base case 
        if len(num) == len(nums):
            self.res.append(num[:])
            return
        # 状态选择
        for i in range(len(nums)):
            # 已访问标记
            if used[i]:
                continue
            # 做选择
            num.append(nums[i])
            used[i] = True
            # 进入下一轮决策树
            self.backtrack(used, nums, num)
            # 撤销选择
            used[i] = False
            num.pop()


    def permute(self, nums: List[int]) -> List[List[int]]:
        # 标记访问路径
        used = [False] * len(nums)
        # 存储路径
        num = []
        self.backtrack(used, nums, num)
        return self.res

标签:选择,used,nums,self,backtrack,----,num,回溯,LeetCode
From: https://www.cnblogs.com/liuyechang/p/17466941.html

相关文章

  • Database System Concepts——读书笔记 第二章 关系模型简介
    关系模型简介在关系模型中,术语relation用于指代table,而术语tuple用于指代row。类似地,术语attribute(属性)指的是表中的一column(列)。我们必须区分数据库模式和数据库实例,前者是数据库的逻辑设计,后者是给定时刻数据库中数据的快照。关系的模式指的是它的逻辑设计,而关系的实例指的......
  • 【高中生物必修二】第二章 基因和染色体
    第一节减数分裂与受精作用减数分裂是两倍体细胞(有性繁殖)产生单倍体配子的过程,简单而言,染色体的数量变为一半。二倍体细胞中每一对染色体大小形态意义类似,一个从母方获得,一个从父方获得,故一对染色体也会有差距。有丝分裂产生复制品,往往用于常被磨损的细胞,例如皮肤。减数分裂的主......
  • LeetCode----前缀和
    1算法原理适用场景:利用preSum数组,可以在O(1)的时间内快速求出nums任意区间[i,j]内的所有元素之和sum(i,j)=preSum(j+1)-preSum[i]算法模板classNumArray:def__init__(self,nums:List[int]):N=len(nums)self.preSum=[0]*(N+1)......
  • Database System Concepts——读书笔记 第一章 介绍
    数据库系统概念——第一章数据库管理系统(DBMS)由相互关联的数据集合和访问这些数据的程序集合组成。数据库相对于文件系统,更规范化,提供条件查询能力,避免冗余数据。类似操作系统于底层硬件,提供抽象能力,易用性。physicallevel->logicallevel->viewlevelinstance和schem......
  • VMware Workstation 无法连接到虚拟机
    今天一打开VMware中的虚拟机就遇到这个问题:VMwareWorkstation无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问所有临时文件目录。百度找到了几个解决方法:一、删除HKEY_CURRENT_USER\Software\VMware,Inc.操作:cmd->regedit->删除HKEY_CURREN......
  • Database System Concepts——读书笔记 第三、四、五章 SQL简介
    SQL简介关系代数运算和SQL运算之间有着密切的联系。一个关键的区别是,与关系代数不同,SQL允许重复与select子句不同,union联合操作会自动消除重复项.如果我们想保留所有的副本,我们就必须用“unionall”代替“union.intersectall,exceptall您可以验证,如果r.A为null,则“1<r.A”......
  • 打印凌形
    intmain(){ intline=0; scanf("%d",&line);//输入上半部分的行数 inti=0; //先打印上半部分 for(i=0;i<line;i++) { intj=line-1-i;//打印空格的数量 while(j) { printf(""); j--; } intk=2*i+1;//打印*的数量 while(k) { printf("*......
  • 总结vue3 的一些知识点:MySQL NULL 值处理
    MySQLNULL值处理我们已经知道MySQL使用SQLSELECT命令及WHERE子句来读取数据表中的数据,但是当提供的查询条件字段为NULL时,该命令可能就无法正常工作。为了处理这种情况,MySQL提供了三大运算符:ISNULL: 当列的值是NULL,此运算符返回true。ISNOTNULL: 当列的......
  • SDN ryu.app.ofctl_rest操作实践
    安装Postman网上自己找教程,也可用国内的对标产品Apipost本文采用的是Apipost启动Ryu控制器切换到自己的ryu目录cd/home/ubuntu/ryu/ryu/appsudoryu-managersimple_switch.py再开一个终端cd/home/ubuntu/ryu/ryu/appsudoryu-managerofctl_rest.py如果遇到......
  • python 中 将列表中的数值转换为字符串
     001、>>>list1=[111,222,333]>>>list1[111,222,333]>>>list1=[str(i)foriinlist1]##将列表中数值转换为字符串>>>list1['111','222','333'] ......