美文网首页
leetcode46. 全排列

leetcode46. 全排列

作者: 冰源 | 来源:发表于2018-10-26 22:07 被阅读9次
  • 题目


    全排列
  • 思路

使用深度优先&递归方法来做
不断地抽取其中一个数字,剩余数字构成子问题:1+[2,3]、2+[1,2]、3+[1,2]
停止条件是len(list)==1时候开始从最底层开始返回

  • 注意点

不断生成的是list套list,不能直接将一个数字加上list,比如1+[2,3]≠[1,2,3],正确的写法是[1]+[2,3]=[1,2,3],更不要幻想1+[[2,3],[3,2]]=[[1,2,3],[1,3,2]],正确的做法是利用循环遍历出来进行加法


提取的时候也要注意,这个是有放回式的抽取,剩余应该这样提取rest = nums[:i] + nums[i + 1:]


注意输入本身就是空值

#python3
class Solution:
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        if len(nums) == 0:
            return []
        if len(nums) == 1:
            return [nums]
        res=[]
        for i in range(len(nums)):
            # res.append(nums[i]+self.permute([nums[i:]]))
            prefix = nums[i]
            rest = nums[:i] + nums[i + 1:]
            for j in self.permute(rest):
                res.append([prefix] + j)
        return res

sol = Solution()
print(sol.permute([1,2,3]))
  • 另一个思路

提炼深度遍历dfs(nums, path, res)
nums是呆遍历的子问题,path是代拼接部分,res是子问题的结果
停止条件是dfs时候nums已空

  • 注意

path初始化是空list

class Solution:
    # DFS
    def permute(self, nums):
        res = []
        self.dfs(nums, [], res)
        return res

    def dfs(self, nums, path, res):
        if not nums:
            res.append(path)
            # return # backtracking
        for i in range(len(nums)):
            self.dfs(nums[:i]+nums[i+1:], path+[nums[i]], res)

相关文章

  • leetcode46. 全排列

    题目全排列 思路 使用深度优先&递归方法来做不断地抽取其中一个数字,剩余数字构成子问题:1+[2,3]、2+[1,...

  • LeetCode46.全排列 JavaScript

    给定一个没有重复数字的序列,返回其所有可能的全排列。 示例: 参考:

  • [回溯]leetcode46. 全排列

    题目 46. 全排列[https://leetcode-cn.com/problems/permutations/...

  • 全排列与字典序

    全排列 递归实现全排列; 首先来说递归算法实现全排列: 例如,对于{1,2,3,4}的例子进行全排列,其可以分解...

  • 全排列

    求全排列最简单的就是递归了123 的全排列共有 6 个, 123 的全排列等于以 1 开头 23 的全排列, 加上...

  • 全排列

    题目 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排...

  • 全排列

    递归的版本image.png

  • 全排列

  • 全排列

  • 全排列

    给出一个列表[1,2,3],其全排列为: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,...

网友评论

      本文标题:leetcode46. 全排列

      本文链接:https://www.haomeiwen.com/subject/agtrtqtx.html