
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/permutations 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
类似题目:

class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<int> row;
vector<vector<int>> ans;
unordered_map<int, int> m;
bt(nums, 0, m, row, ans);
return ans;
}
void bt(vector<int>& nums, int count, unordered_map<int, int> m, vector<int> row, vector<vector<int>>& ans)
{
if(count == nums.size())
{
ans.push_back(row);
return;
}
for(int i = 0; i < nums.size(); ++i)
{
if(m.find(i) == m.end())
{
m[i] = 1;
row.push_back(nums[i]);
bt(nums,count+1,m,row,ans);
row.pop_back();
m.erase(i);
}
}
}
};用bool数组做判断,节省内存

class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<int> row;
vector<vector<int>> ans;
bool occurred[nums.size()];
memset(occurred, 0, sizeof(bool)*nums.size());
bt(nums, 0, occurred, row, ans);
return ans;
}
void bt(vector<int>& nums, int count, bool *occurred, vector<int> row, vector<vector<int>>& ans)
{
if(count == nums.size())
{
ans.push_back(row);
return;
}
for(int i = 0; i < nums.size(); ++i)
{
if(occurred[i] == false)
{
occurred[i] = true;
row.push_back(nums[i]);
bt(nums,count+1,occurred,row,ans);
row.pop_back();
occurred[i] = false;
}
}
}
};