全排列问题
比如给个数字 123 如何将他们进行 全排列
我们这里用到了递归的思考
比如
1跟2先调换 213 然后 1 跟 3 重新进行全排列,然后再调换回来
swap(p[0],p[1]);
permutations(p,1,2);
swap(p[0],p[1]);
然后1 跟 3 调换 变成 321 然后 2跟1重新进行全排列
swap(p[0],p[2]);
permutations(p,1,2);
swap(p[0],p[2]);
假如说我们在第一次的时候 设1跟1它自己本身调换,也就有了
swap(p[0],p[0]);
permutations(p,1,2);
swap(p[0],p[0]);
那么我们结合这几次 看到我们的排列是可以写成一个for循环的
for(int i = k;i <= m;i++)
{
swap(p[k],p[i]);
permutations(p,k+1,m);
swap(p[k],p[i]);
}
最后附上完整代码:
class Solution {
public:
vector<vector<int> > permute(vector<int> &num) {
vector<vector<int> > result;
permutationrecusive(num,0,result);
return result;
}
void permutationrecusive(vector<int> &num,int k, vector<vector<int> >&result)
{
if(k == num.size())
{
result.push_back(num);
return ;
}
for(int i = k;i < num.size();i++)
{
swap(num[k],num[i]);
permutationrecusive(num,k+1,result);
swap(num[k],num[i]);
}
}
};