123的全排列:固定第一个数,求剩下数的全排列,依次类推,这是一个递归。每一个数都要做一下第一个数,需要一个for循环,在里面swap。当只剩一个数的时候,全排列是它自己,退出。
123
132
213
231
312
321
需要注意的是:
123让2当老大,得到213,当你要让3当老大的时候,要先把数列还原为123。
vector<vector<int> > pv;
void perm(vector<int> &v, int n){
if(n==v.size())
pv.push_back(v);
else{
for(int i=n; i<v.size(); i++){
swap(v[i],v[n]);
perm(v, n+1); //第n个数分别与它后面的数字交换
swap(v[i],v[n]);//还原
}
}
}
一个很清楚的视频讲解:https://www.bilibili.com/video/av9830088/