当前位置: 首页 > article >正文

leetcode刷题-回溯算法04

代码随想录回溯算法part01| 491.递增子序列、46.全排列、47.全排列II

  • 491.递增子序列
  • 46.全排列
  • 47.全排列II

491.递增子序列

leetcode题目链接
代码随想录文档讲解

思路

与上一题不同,不能用used列表,因为这个题不能排序,
在每一个for循环里面用一个集合记录遍历过的数

伪代码(C++)

python代码

class Solution:
    def backtracking(self, nums, start_index, path, result):
        if len(path) > 1:
            result.append(path[:])
        used = set()
        for i in range(start_index, len(nums)):
            if (path and nums[i] < path[-1]) or (nums[i] in used):
                continue
            path.append(nums[i])
            used.add(nums[i])
            self.backtracking(nums, i+1, path, result)
            path.pop()

    def findSubsequences(self, nums: List[int]) -> List[List[int]]:
        result = []
        self.backtracking(nums, 0, [], result)
        return result
        
        

46.全排列

leetcode题目链接
代码随想录文档讲解

思路

排列(考虑顺序)和组合问题(不考虑顺序)的区别
借助used数组(需要进入递归)

python代码

class Solution:
    def backtracking(self, nums, used, path, result):
        if len(path) == len(nums):
            result.append(path[:])
            return
        for i in range(len(nums)):
            if used[i]:
                continue
            path.append(nums[i])
            used[i] = 1
            self.backtracking(nums, used, path, result)
            # 做回溯
            used[i] = 0
            path.pop()
    def permute(self, nums: List[int]) -> List[List[int]]:
        result = []
        used = [False] * len(nums)
        self.backtracking(nums, used, [], result)
        return result

47.全排列II

leetcode题目链接
代码随想录文档讲解

思路

集合中有重复元素,去重,(排序)(数层去重used[i-1]==False)

class Solution:
    def backtracking(self, nums, used, path, result):
        if len(path) == len(nums):
            result.append(path[:])
            return
        for i in range(len(nums)):
            if (used[i] == 1) or (i >0 and nums[i] == nums[i-1] and used[i-1] == 0):
                continue # not break
            path.append(nums[i])
            used[i] = 1
            self.backtracking(nums, used, path, result)
            used[i] = 0
            path.pop()
    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        nums.sort()  # 排序
        result = []
        self.backtracking(nums, [0]*len(nums), [], result)
        return result
        

http://www.kler.cn/a/444987.html

相关文章:

  • ios 混合开发应用白屏问题
  • 【Prometheus 】【实战篇(五)】深入解析 Prometheus 监控指标类型:Counter、Gauge、Histogram 和 Summary
  • 32单片机串口数据接收、空闲IDLE中断详解
  • Transfomer的各层矩阵
  • 8_HTML5 SVG (4) --[HTML5 API 学习之旅]
  • React 19有哪些新特性?
  • 安装MMClassification的详细步骤
  • 以二进制形式创建gitea仓库
  • 网络安全的攻防战争
  • 解锁大数据治理的关键力量
  • 数据压缩比 38.65%,TDengine 重塑 3H1 的存储与性能
  • paimon中的Tag
  • java-6验证码校验
  • 如何通过HTTP API新建Collection
  • 南城云趣:智能云平台,杜绝电动车充电安全隐患
  • Oracle创建逻辑目录
  • 网络安全概论——防火墙原理与设计
  • 【算法练习】尺取法——答案
  • 【Linux篇】基础开发工具-编译器gcc/g++
  • 算法训练第二十三天|93. 复原 IP 地址 78. 子集 90. 子集 II
  • Restaurants WebAPI(一)—— clean architecture
  • ABeam 德硕 | ABeam旗下艾宾信息技术开发(上海)有限公司大连分公司数交会之行全景回顾
  • 51c视觉~合集33
  • 【GESP】C++二级考试大纲知识点梳理, (4)流程图
  • metagpt中ActionNode的用法
  • 如何保证开源AI呼入机器人和AI呼出机器人的数据安全性?