Permutations
题目:Given a collection of numbers, return all possible permutations.
For example,
[1,2,3] have the following permutations:
[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2],
and [3,2,1].
思路:
使用回溯法,一开始先进第一个,当然最后需要弹出来,回溯的必然操作,然后,我需要和我一开始的start进行交换,因为我有许多种可能性。
其实题目隐含着第几次交换的计算,就和真正人计算排列组合时候,从左往右开始数数,选择某一个,先是和第一个交换,这个时候结束了,生成新的数组或者字符串s’,下一次交换就是对s’进行交换啦。当然是从s’的start开始,当然题目中都是用nums进行表示的,为了理解,我写成nums。
本题不算特别难。
代码:
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int> >result;
permuteHelper(0,nums,result);
return result;
}
void permuteHelper(int start,vector<int>& nums,vector<vector<int> >&result){
if(start==nums.size()){
result.push_back(nums);
return;
}
for(int i=start;i<nums.size();i++){
swap(nums[i],nums[start]);
permuteHelper(start+1,nums,result);
swap(nums[i],nums[start]);
}
}
};

浙公网安备 33010602011771号