🌐 AI搜索 & 代理 主页

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)$

相关题目

最后更新于

这有帮助吗?