46. 全排列

tech2023-12-30  79

1.题目描述

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

2.回溯法

1.求出所有可能出现在第一个位置的元素,即把第一个元素和后面所有元素交换 2.固定第一个元素,求后面所有元素的排列 3.固定前两个元素… 4.然后递归地处理后面的元素 5.回溯的时候要交换回元素

3.代码

class Solution { public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> res; if(nums.empty()){ return res; } backTrack(nums, res, 0); return res; } void backTrack(vector<int>& nums, vector<vector<int>> & res, int begin){ if(begin == nums.size() - 1){ res.push_back(nums); } for(int i = begin; i < nums.size(); ++i){ if(i != begin && nums[i] == nums[begin]){ continue; } swap(nums[begin], nums[i]); backTrack(nums, res, begin + 1); swap(nums[begin], nums[i]); } } };

4.复杂度分析

时间复杂度:O(n * n!),其中 n 为序列的长度。 空间复杂度:O(n)

最新回复(0)