博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 46. Permutations
阅读量:4578 次
发布时间:2019-06-09

本文共 1793 字,大约阅读时间需要 5 分钟。

原题

Given a collection of distinct numbers, return all possible permutations.

For example,

[1,2,3] have the following permutations:

[  [1,2,3],  [1,3,2],  [2,1,3],  [2,3,1],  [3,1,2],  [3,2,1]]

解题思路

递归:递归的方法,创建一个visit判断此值是否已经添加过,每一层不断地循环,加入没有被访问的元素,直到最后结果的长度满足要求加入答案中

class Solution(object):    def permute(self, nums):        """        :type nums: List[int]        :rtype: List[List[int]]        """        if nums == None:            return []        visit = [0 for i in range(len(nums))]        self.ret = []        self._permute(nums, visit, 0, [])        return self.ret            def _permute(self, nums, visit, count, ret):        if count == len(nums):            self.ret.append(ret)            return        for i in xrange(len(nums)):            if visit[i] == 0:                # ret += [nums[i]]  容易出错,如果加入这句后面需要还原,不然影响后面的循环                visit[i] = 1                self._permute(nums, visit, count+1, ret+[nums[i]])                visit[i] = 0

非递归:跟之前求subsets的思路类似(不过这个是求重复项,sbusets是求非重复),也是从一个个元素一层层加上去,只不过加入结果的时候必须满足长度要求

class Solution(object):    def permute(self, nums):        """        :type nums: List[int]        :rtype: List[List[int]]        """        if nums is None:            return []        result = []        self.helper(nums, [], result)        return result    def helper(self, List, path, result):        if len(path) == len(List):            result.append(path)            return                # 跟subsets思路差不多,不过这个是重复,sbusets是非重复        # 也是从一个个元素一层层加上去,只不过加入结果的时候必须满足长度要求        for i in range(len(List)):            # 不重复加入同一元素            if List[i] in path:                continue            # path.append(List[i])            self.helper(List, path + [List[i]], result)            # path.pop()

  

转载于:https://www.cnblogs.com/LiCheng-/p/6632897.html

你可能感兴趣的文章
[转]Blocking Code Injection on iOS and OS X
查看>>
vue $options 获取自定义属性
查看>>
Vue避免 v-if 和 v-for 用在一起
查看>>
【Source教程】GCFScape下载安装与使用
查看>>
两个集合相减怎么算_你家使用的防火窗(耐火窗)质量合格吗?怎么判断好坏呢?...
查看>>
python整数作为条件_Python整数类型(int)详解
查看>>
JRE System Library 与Java EE Libraries的区别
查看>>
颜色分类函数
查看>>
(中等) HDU 4725 The Shortest Path in Nya Graph,Dijkstra+加点。
查看>>
sort-归并排序
查看>>
django 快速实现完整登录系统(cookie)
查看>>
.NET中的out和ref关键字
查看>>
Python之ftp服务器
查看>>
KMP预处理
查看>>
oracle的wm_concat函数实现行转列
查看>>
C语 三子棋小游戏
查看>>
[BZOJ 1861] 书架
查看>>
送给毕业生的一个学习建议
查看>>
基于redis+lua实现高并发场景下的秒杀限流解决方案
查看>>
Oracle 块修改跟踪 (Block Change Tracking) 说明
查看>>