题目要求:
Given a collection of numbers, return all possible permutations.
For example,
[1,2,3]
have the following permutations:
[1,2,3]
, [1,3,2]
, [2,1,3]
, [2,3,1]
, [3,1,2]
, and [3,2,1]
.
从集合中一次选出每一个元素作为排列的第一个元素,然后对生育的元素进行全排列,如此递归从而得到全排列。例如:
固定1,求后面2,3的排列 123, 132求完后交换1和2得到 213,
固定2, 求后面1,3的排列213,231 ,求完后3放到第一个位置得 321,
固定3,求后面1,2的排列321, 312
代码:
class Solution {
public:
vector<vector<int> > ans;
vector<vector<int> > permute(vector<int> &num)
{
ans.clear();
if (num.size() == 0) {
return ans;
}
Permutation(num, 0);
return ans;
}
void Permutation(vector<int>& num, int begin)
{
//cout << begin << endl;
if(begin == num.size())
{
ans.push_back(num);
return ;
}
for (size_t i = begin; i < num.size(); ++i) {
swap(num[begin], num[i]);
Permutation(num, begin + 1);
swap(num[begin], num[i]);
}
}
};