题目大意:给定一个数字的集合,返回所有的组合形式。
例如:【1,2,3】返回[1,2,3]
, [1,3,2]
, [2,1,3]
, [2,3,1]
, [3,1,2]
, and [3,2,1]
思路:对于这种问题,一般都是递归求解,在递归中改变参数的值。可以考虑深度遍历。
最近刷题少,想了好久,下面是ac的代码,运行时间12ms:
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> resu;
solve(nums,0,resu);
return resu;
}
void solve(vector<int>& nums,int index,vector<vector<int>> &resu)
{
if(index==nums.size())
{
resu.push_back(nums);
return;
}
for(int i=index;i<nums.size();++i)
{
swap(nums[index],nums[i]);
solve(nums,index+1,resu);
swap(nums[index],nums[i]);
}
}
};