代码随想录训练营Day 24|Python|Leetcode|491.递增子序列* 46.全排列* 47.全排列 II

491.非递增子序列

给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。

数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。

解题思路:

输入参数:def backtracking(nums, start_index)

停止条件:if len(path)>1: result.append(path)

递归逻辑:数层去重+检查是否递增

本题不必sort nums

class Solution:
    def findSubsequences(self, nums: List[int]) -> List[List[int]]:
        path = []
        result = []
        def backtracking(nums, start_index):
            if len(path)>1:
                result.append(path[:])
                # return
            #在每一层设置一个uset记录查重
            uset = set()
            for i in range(start_index, len(nums)):
                if path and nums[i] < path[-1]:
                    continue
                if nums[i] in uset:
                    continue
                uset.add(nums[i])
                path.append(nums[i])
                backtracking(nums, i+1)
                path.pop()
        backtracking(nums, 0)
        return result

46.全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

解题思路:

本题不用记录start_index只用记录使用过的数。当使用start_index时是为了让接下来可选择的数从当前数的下一个开始。

输入参数:def backtracking(nums, used)

停止条件:if len(path) == len(nums): append+return

回溯逻辑:检查该数字是否已经使用过,再进行递归

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

47.全排列 II

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。

解题思路:

本题要注意除重,判断上一个数字是否使用过,没有使用过并且前后数字相同就进行树层除重。

输入参数:def backtracking(nums, used)

停止条件:if len(path) == len(nums): result append

回溯逻辑:除重+除去使用已经用过的数字

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

最近更新

  1. TCP协议是安全的吗?

    2024-04-22 04:26:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-22 04:26:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-22 04:26:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-22 04:26:04       18 阅读

热门阅读

  1. 用pigeon kotlin swift写一个自己的插件

    2024-04-22 04:26:04       15 阅读
  2. 【Redis(2)】Redis的持久化方式RDB和AOF配置

    2024-04-22 04:26:04       13 阅读
  3. tcp网络编程(基础)

    2024-04-22 04:26:04       12 阅读
  4. app创建

    app创建

    2024-04-22 04:26:04      14 阅读
  5. Unity 计时任务管理器TimeHandle

    2024-04-22 04:26:04       13 阅读
  6. HashMap

    HashMap

    2024-04-22 04:26:04      13 阅读
  7. 【随手笔记】一个关于typedef定义的数组调用问题

    2024-04-22 04:26:04       16 阅读
  8. docker安装Elasticsearch

    2024-04-22 04:26:04       12 阅读
  9. SparkSQL允许左联接的数据量大于左表数据量?

    2024-04-22 04:26:04       13 阅读
  10. Gradle:安装、配置及基础使用指南

    2024-04-22 04:26:04       12 阅读
  11. [leetcode] 快乐数 E

    2024-04-22 04:26:04       12 阅读
  12. C# 多线程 未完

    2024-04-22 04:26:04       9 阅读
  13. Python机器学习项目开发实战:深度神经网络

    2024-04-22 04:26:04       12 阅读
  14. Tomcat源码解析——热部署和热加载原理

    2024-04-22 04:26:04       13 阅读
  15. CentOS7 aarch64安装yum

    2024-04-22 04:26:04       12 阅读