博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
46. 全排列
阅读量:5266 次
发布时间:2019-06-14

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

题意

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

示例:

输入: [1,2,3] 输出: [   [1,2,3],   [1,3,2],   [2,1,3],   [2,3,1],   [3,1,2],   [3,2,1] ]

解题思路

  1. 回溯:遍历数组,两两交换给定对应下标的值;

  2. 记忆化:通过遍历当前路径数组,遍历当前的路径数组选择位置来插入index对应的值实现;

实现

class Solution(object):     def permute(self, nums):         """         :type nums: List[int]         :rtype: List[List[int]]         """         def swap(i, j):             nums[i], nums[j] = nums[j], nums[i]                      def helper(index):             if index >= len(nums):                 res.append(nums[:])                 return             for i in range(index, len(nums)):                 swap(i, index)                 helper(index+1)                 swap(index, i)                  res = []         helper(0)         return res          def permute(self, nums):         """         :type nums: List[int]         :rtype: List[List[int]]         """         def helper(index, path):             if len(path) == len(nums):                 res.append(path[:])             else:                # 长度+1是为了考虑当path为空的情况下能够进入循环                 # 同时也考虑到需要插入到path下标的位置                 for i in range(0, len(path) + 1):                    # i代表插入的位置,将index对应的值插入到path中                     helper(index + 1, path[:i] + [nums[index]] + path[i:]) ​         res = []         helper(0, [])         return res          def permute(self, nums):        "和上面一样的思路,迭代实现,遍历当前数组,选择插入位置"         if not nums:             return []         res = [[]] ​         # 选定一个元素         for num in nums:             # 遍历结果,加入这个元素             temp = []             for cur in res:                 # 选择插入位置                 for i in range(len(cur)+1):                     temp.append(cur[:i] + [num] + cur[i:])             res = temp         return res

转载于:https://www.cnblogs.com/George1994/p/7439501.html

你可能感兴趣的文章
JS博客
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
ASP.NET WebApi 基于OAuth2.0实现Token签名认证
查看>>
283. Move Zeroes把零放在最后面
查看>>
Visual Studio Code 打开.py代码报Linter pylint is not installed解决办法
查看>>
Python 数据类型
查看>>
S5PV210根文件系统的制作(一)
查看>>
centos下同时启动多个tomcat
查看>>
slab分配器
查看>>
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
【SVM】libsvm-python
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
Leetcode Balanced Binary Tree
查看>>
九.python面向对象(双下方法内置方法)
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>