題目:
連結
解答:
采用遞歸,每次第一個元素和後面的元素進行交換,然後生成除第一個元素以外的後面的排列。
代碼:
class Solution {
public:
vector<vector<int> > permute(vector<int> &num) {
int size = num.size();
vector<vector<int> > res;
per(num, res, 0);
return res;
}
private:
void per(vector<int> &num, vector<vector<int> > &res, int k)
{
if (k == num.size())
{
res.push_back(num);
}
for (int i = k; i < num.size(); i++)
{
swap(num[k], num[i]);
per(num, res, k + 1);
swap(num[k], num[i]);
}
}
void swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
};