首页 > 其他分享 >回溯-排列型

回溯-排列型

时间:2024-07-16 14:41:38浏览次数:7  
标签:排列 nums int 回溯 List dfs ans path

 

 

 利用哈希表

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        ans = []
        path = []
        n = len(nums)

        def dfs(i, s):
            if i==n:
                ans.append(path[:])
                return
            
            for x in s:
                path.append(x)
                dfs(i+1, s-{x})
                path.pop()
            
        dfs(0, set(nums))
        return ans

利用访问数组

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        ans = []
        path = []
        n = len(nums)
        on_path = [False]*n

        def dfs(i):
            if i==n:
                ans.append(path[:])
                return
            
            for j in range(n):
                if not on_path[j]:
                    path.append(nums[j])
                    on_path[j] = True
                    dfs(i+1)
                    on_path[j] = False
                    path.pop()
            
        dfs(0)
        return ans

 

直接将nums[i] 的元素超出题目设置范围

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        ans = []
        path = []
        n = len(nums)

        def dfs(i):
            if i==n:
                ans.append(path[:])
                return
            
            for j in range(n):
                if nums[j] <=10 :
                    path.append(nums[j])
                    nums[j]+=100
                    dfs(i+1)
                    nums[j]-=100
                    path.pop()
            
        dfs(0)
        return ans

 

标签:排列,nums,int,回溯,List,dfs,ans,path
From: https://www.cnblogs.com/r1-12king/p/18305180

相关文章

  • Day68 代码随想录打卡|回溯算法篇---子集
    题目(leecodeT78):给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。方法:本题为求子集问题,采用回溯算法解决,与之前的组合与分割问题我们最后收集的是树上的叶子节点不同。子集......
  • Day66 代码随想录打卡|回溯算法篇---分割回文串
    题目(leecodeT131):给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串。返回 s 所有可能的分割方案。方法:本题是一个分割回文串的问题,是回溯算法的另一类问题。针对一个字符串,我们要对其进行分割,并且确保分割后生成的子串也必须全都是回文串。分析回溯三......
  • 【代码随想录|回溯算法 77. 组合】
    代码随想录|回溯算法77.组合,216.组合总和III,17.电话号码的字母组合一、77.组合1.核心代码2.输入输出3.问题总结python一、77.组合内容77.组合1.核心代码代码如下(示例):classSolution:defcombine(self,n:int,k:int)->List[List[int]]:......
  • 回溯-子集型
    参考:回溯算法套路①子集型回溯【基础算法精讲14】ps:0-1背包也是一种子集型回溯  注意:递归参数中的i不是第i个,而是下标大于等于i的这部分 例题: classSolution:deff1(self,nums):n=len(nums)ifn==0:return[......
  • C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组,直方图打印,计算全排列,
    目录C语言中的数组:掌握数据的有序集合【一维数组,二维数组,字符串数组】一维数组一维数组的创建数组的七种初始化完全初始化:部分初始化:字符数组的初始化:自动初始化为0:使用`memset`函数初始化:循环初始化:指定初始化器(`c99`,`gcc`)支持:一维数组的使用案例1:统计随机数的分布......
  • 1.1 排列与组合
    性质1以下组合恒等式成立:\(1\).\(\dbinom{n}{k}=\dbinom{n}{n-k}\).\(2\).\(\dbinom{n}{k}=\dbinom{n-1}{k}+\dbinom{n-1}{k-1}\).\(3\).\(\dbinom{n}{k}=\dfrac{n}{k}\dbinom{n-1}{k-1}\).证明:虽然可以代入组合数公式\(\dbinom{n}{k}=\dfrac{n!}{k!(n-k)!}\)暴力验......
  • 递归示例-指定数字以内的所有排列组合(Base)
    指定数字以内的所有排列组合:定义名称版:=pmtB(指定数字)=LAMBDA(x,IF(x=1,1,VSTACK(pmtB(x-1),SUBSTITUTE(BASE(SEQUENCE(x^x)-1,x,x),0,x))))不定义名称版:=LET(fx,LAMBDA(npmtB,x,IF(x=1,1,VSTACK(npmtB(npmtB,x-1),SUBSTITUTE(BASE(SEQUENCE(x^x)-1,x,x),0,x)))),fx......
  • Day65 代码随想录打卡|回溯算法篇---组合总和II
    题目(leecodeT40):给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用 一次 。注意:解集不能包含重复的组合。 方法:本题的要求是每个元素在组合中只能......
  • 回溯算法-以学生就业管理系统为例
    1.回溯算法介绍1.来源回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。用回溯算法解决问题的一般步骤:1、针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)解。2、确定易于搜索的解空间结构,使得能用回溯法方便地搜索整个解空间。3、以深度优先的方式搜索......
  • 回溯大合集+主元素+DFS图
    子集和问题importjava.util.Scanner;​publicclassMain{  staticintn;//元素个数  staticinttarsum;//目标和  staticintremainSum=0;//当前元素加到最后一个元素的总和,剩余元素和  staticintsesum=0;//已选元素之和  static......