1.问题描述
2.问题分析
全排列问题归根到底就是要把所有可能都找出来,一般方式就是深度或者广度遍历。本文考虑利用深度遍历结合回溯的方案。举个例子。假如第一次选择1,则第二次可以选择2,第三次选择3,这样三个元素就利用完了,接着退回到第二步,第二次可以选3,则第三步可以选2。依然退回到第二步,发现第二步所有可能已经遍历完,接着回退第一步,第一步还可以备选的有2,3,接着重复上述流程就可以获得所有值。思路很简单,但是如何选择合适的数据结构与算法是关键。
3.代码
vector<vector<int> > permute(vector<int> &num)
{/*numw为输入,返回值是所有排列组合*/
vector<vector<int> > result;//结果
Function(result,num,0);//递归函数
return result;
}
void Function(vector<vector<int>>& result, vector<int> num, int n)
{
int size=num.size();
if(n==size) result.push_back(num);
for(int i=n;i<size;i++)
{
swap(num[n],num[i]);
Function(result,num,++n);
swap(num[--n],num[i]);
}
}