给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
题目分析
- 要求:进行全排列
分析
对于全排列的第n个位置
有 n - 1 的元素可以选择
确定第n个元素的后确定第n + 1个元素 ==> 递归
例如:
输入[1,2]
对于第一个位置可选择[1,2]
如果选择1第二个位置可选择元素只有[2]
如果选择2第二个位置可选择元素只有[1]
解题思路
变量 | 作用 | 说明 |
---|---|---|
line() | 递归函数 | temp当前数组+nums当前可选择元素数组+ans结果 |
过程
如果当前可选择元素的个数为0 ==> 说明完成一次全排列
遍历nums元素插入当前数组temp
对下一次可选择元素数组进行更新 ==>递归
代码如下
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> ans;
vector<int> temp;
line(temp, nums, ans);
return ans;
}
void line(vector<int> temp, vector<int> nums, vector<vector<int>> &ans) {
if(nums.size() == 0) {
ans.push_back(temp);
return;
}
for (int i = 0; i < nums.size(); ++i) {
temp.push_back(nums[i]);
vector<int> next;
next = nums;
next.erase(next.begin() + i); //将当前插入元素去除
line(temp, next, ans);
temp.pop_back();
}
}
};