0046. 全排列
题目地址(46. 全排列)
https://leetcode-cn.com/problems/permutations/
题目描述
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]前置知识
公司
阿里
腾讯
百度
字节
思路
回溯的基本思路清参考上方的回溯专题。
以 [1,2,3] 为例,我们的逻辑是:
先从 [1,2,3] 选取一个数。
然后继续从 [1,2,3] 选取一个数,并且这个数不能是已经选取过的数。
如何确保这个数不能是已经选取过的数?我们可以直接在已经选取的数字中线性查找,也可以将已经选取的数字中放到 hashset 中,这样就可以在 $O(1)$ 的时间来判断是否已经被选取了,只不过需要额外的空间。
重复这个过程直到选取的数字个数达到了 3。
关键点解析
回溯法
backtrack 解题公式
代码
语言支持: Javascript, Python3,CPP
Javascript Code:
Python3 Code:
CPP Code:
复杂度分析 令 N 为数组长度。
时间复杂度:$O(N!)$
空间复杂度:$O(N)$
相关题目
最后更新于
这有帮助吗?