首页 > 其他 > 详细

46. 全排列

时间:2020-01-28 21:03:48      阅读:72      评论:0      收藏:0      [点我收藏+]

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

 

本来我是想学之前的T62 有限路径 T89 格雷编码 那种选择有限的递归,但是我发现我不太会返回,自己写的递归还是有欠缺,还是去看答案

 

答案跟我之前写的一样,可能我有些细节不太行把,先把答案放过来

****************************************************************

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        res  = []
        def helper(cur,nums):
            if not nums:
                res.append(cur)
                return
            for i in range(len(nums)):
                helper(cur + [nums[i]],nums[:i]+nums[i+1:])
        helper([],nums)
        return res
 
******************************************************************

我终于知道我哪里错了,就是加粗的地方,原来我写的是

curList = helper(cur+ [nums[i]], nums[:i] + nums[i+1:])

仔细想想,之前的回溯算法也都是直接 调用helper函数 ,没有把函数赋值,难怪一直报错

 

 

底层:

  如果用完nums里的元素,则添加到res

  if not nums:

    res.append(curList)

    return

顶层:

  把没加入curList的元素全部遍历一遍,每层都全加一次,这样就比我之前自己写的每次还要判断要好。

  for i in range(len(nums)):

    helper(curList + [nums[i]], nums[:i] + nums[i+1:])

 

46. 全排列

原文:https://www.cnblogs.com/ChevisZhang/p/12238867.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!