【力扣46】全排列
题目
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:
1 | 输入:nums = [1,2,3] |
示例 2:
1 | 输入:nums = [0,1] |
示例 3:
1 | 输入:nums = [1] |
提示:
1 <= nums.length <= 6-10 <= nums[i] <= 10nums中的所有整数 互不相同
实现代码
使用DFS实现回溯算法
1 | class Solution { |
时间复杂度
对于长度为n的数组,全排列的数量为n!。
- 状态空间:全排列的数量为
n! - 每个状态的处理时间:复制当前路径到结果集,时间复杂度为
O(n),
因此,总的时间复杂度为O(n × n!)。
空间复杂度
主要的额外空间消耗来自:
traceList:存储所有全排列,共有n!个排列,每个排列长度为n,则空间复杂度为O(n × n!)。trace:递归过程中存储当前路径,最大深度为n,空间复杂度为O(n)boo数组:记录每个元素是否被使用,空间复杂度为O(n)- 递归调用栈:最大深度为
n,空间复杂度为O(n)
因此,如果不计算输出结果的存储空间,额外空间复杂度为O(n)。包含输出结果时为O(n × n!)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 青柠!
评论


















































