首页 > 编程语言 >29天【代码随想录算法训练营34期】第七章 回溯算法part05 (491.递增子序列 * 46.全排列 * 47.全排列 II)

29天【代码随想录算法训练营34期】第七章 回溯算法part05 (491.递增子序列 * 46.全排列 * 47.全排列 II)

时间:2024-04-17 16:57:16浏览次数:13  
标签:排列 nums self 随想录 len 算法 used result path

491.递增子序列
如果在最前面加一个uset = set(),这个就是给这一层一个used set,很好用,不错

class Solution:
    def findSubsequences(self, nums: List[int]) -> List[List[int]]:
        result = []
        self.backtracking(nums, [], result, 0)
        return result
    def backtracking(self, nums, path, result, index):
        if len(path) > 1:
            result.append(path[:])
        uset = set()
        for i in range(index, len(nums)):
            if (path and nums[i] < path[-1]) or nums[i] in uset:
                continue
            else:
                path.append(nums[i])
                uset.add(nums[i])
                self.backtracking(nums, path, result, i+1)
                path.pop()

46.全排列

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        result = []
        self.backtracking(nums, result, [], [False] * len(nums))
        return result
    
    def backtracking(self, nums, result, path, used):
        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] = True
            self.backtracking(nums, result, path, used)
            path.pop()
            used[i] = False

47.全排列 II

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

标签:排列,nums,self,随想录,len,算法,used,result,path
From: https://www.cnblogs.com/miramira/p/18141163

相关文章

  • 算法
    冒泡:选择:插入:希尔:归并:快速:堆:计数:桶:基数:......
  • js 搜索查找算法
    线性查找线性查找是最简单的一种查找算法,它的基本思想是从头到尾遍历待查找的数据集,找到对应的元素,时间复杂度为O(n)。代码实现:functionlinearSearch(arr,target){for(leti=0;i<arr.length;i++){if(arr[i]===target){returni;......
  • KMP算法 Java实现
    Problem:28.找出字符串中第一个匹配项的下标目录解题方法思路构建next数组回溯查找复杂度Code解题方法构建next串回溯查找next串,最后下标思路通过最大前缀后缀能找到下一次未查找到后要回溯的位置构建next数组无论如何第一个数的下一次回溯位置肯定是0,因此next[......
  • Python 数据结构和算法实用指南(三)
    原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d译者:飞龙协议:CCBY-NC-SA4.0第七章:哈希和符号表我们之前已经看过数组和列表,其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效。它们是整数,因此快速且易于操作。但是,它们并不总是对我们很有效......
  • Python 数据结构和算法实用指南(一)
    原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d译者:飞龙协议:CCBY-NC-SA4.0前言数据结构和算法是信息技术和计算机科学工程学习中最重要的核心学科之一。本书旨在提供数据结构和算法的深入知识,以及编程实现经验。它专为初学者和中级水平的研究Python编......
  • Python 数据结构和算法实用指南(二)
    原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d译者:飞龙协议:CCBY-NC-SA4.0第四章:列表和指针结构我们已经在Python中讨论了列表,它们方便而强大。通常情况下,我们使用Python内置的列表实现来存储任何数据。然而,在本章中,我们将了解列表的工作原理,并将研......
  • js带注释的冒泡排序算法
    一、简述冒泡排序(BubbleSort)是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果二者的顺序(如从大到小、首字母从A到Z)错误就交换。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法......
  • 基于Redis实现基本抢红包算法
    简介:[key,value]的缓存数据库,Redis官方性能描述非常高,所以面对高并发场景,使用Redis来克服高并发压力是一个不错的手段,本文主要基于Redis来实现基本的抢红包系统设计.发红包模块:1:发红包模块流程图如下:  用户首先输入红包金额和红包个数,然后生成当前红......
  • day14_我的Java学习笔记 (常用API、Lambda、常见算法)
    1.常用API1.1Date类【案例】:计算出当前时间往后走1小时121秒之后的时间是多少。1.2SimpleDateFormat【练习】:秒杀活动1.3Calendar2.JDK8新增日期类2.1概述、LocalTime/LocalDate/LocalDateTime2.2Ins......
  • 基于yolov2深度学习网络的螺丝螺母识别算法matlab仿真
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述      在工业自动化和质量控制领域,准确且高效的螺丝螺母识别至关重要。深度学习方法,特别是基于卷积神经网络(CNN)的目标检测技术,因其卓越的特征提取能力,成为解决此类问题的有效手段。YOLOv2......