给定一个数字列表,返回其所有可能的排列。
样例
样例 1:
输入:[1]
输出:
[
[1]
]
样例 2:
输入:[1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
挑战
使用递归和非递归分别解决。
注意事项
你可以假设没有重复数字。
全排列问题参考:
https://mp.weixin.qq.com/s/awdWQ75dD8N4dxrn9tAZyg
思路就是固定一个数字,全排列后面的数字,这也是递归的思路
class Solution {
public:
/*
* @param nums: A list of integers.
* @return: A list of permutations.
*/
vector<vector<int>> permute(vector<int> &nums)
{
// write your code here
vector< vector<int> > ans;
vector<int> track;
backtrack(nums, track, ans);
return ans;
}
void backtrack(vector<int>& nums, vector<int>& track, vector< vector<int> >& ans)
{
if (0 == nums.size())
{
/* code */
ans.push_back(track);
}
else
{
for (int i = 0; i < nums.size(); ++i)
{
/* code */
int n = nums[i];
track.push_back(n);
nums.erase(nums.begin()+i);
// 进行下一步决策
backtrack(nums, track, ans);
nums.insert(nums.begin()+i,n);
track.pop_back();
}
}
}
};