一、题目
给定一个不含重复数字的数组 nums ,返回其所有可能的全排列 。你可以按任意顺序返回答案。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/permutations/description/
二、C++解法
我的思路及代码
经典回溯算法
class Solution {
public:
vector<int> temp;
vector<vector<int>> ans;
void backtrack(vector<int> &nums,vector<int>& temp){
//说明路径选择完毕可以跳出
if(nums.size()==temp.size()){
ans.push_back(temp);
return;
}
//遍历当前可选择的所有路径
for(int i=0;i<nums.size();i++){
//找到还未选择的路径
if(count(temp.begin(),temp.end(),nums[i])==0){
//选择路径
temp.push_back(nums[i]);
//进入下一层决策树
backtrack(nums,temp);
//撤销路径
temp.pop_back();
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
backtrack(nums,temp);
return ans;
}
};
- 时间复杂度:
- 空间复杂度:
官方参考代码
- 时间复杂度:
- 空间复杂度:
该问题求解的是不含重复数字的数组的所有可能排列。使用经典的回溯算法,通过遍历并选择未被选择过的数字来生成排列,然后递归进入下一层决策。在每一步选择后,都会进行回溯操作,撤销选择以尝试其他路径。时间复杂度为O(n*n!),空间复杂度为O(n)。

844

被折叠的 条评论
为什么被折叠?



