leecode第四十六题(全排列)
class Solution { public: vector<vector<int>> permute(vector<int>& nums) { int len=nums.size(); vector<vector<int>> res; if(len==0)//特殊情况 { vector<int> res1; res.push_back(res1); return res; } if(len==1)//迭代返回条件 { res.push_back(nums); return res; } for(int i=0;i<len;i++) { vector<int> nums1=nums;//用来复制原数组 int temp=nums1[0]; nums1[0]=nums1[i]; nums1[i]=temp;//交换首字符与第i个位置的值 vector<int> nums2; for(int j=1;j<len;j++) nums2.push_back(nums1[j]);//nums2用来存储除首字符后的值 vector<vector<int>> ans=permute(nums2);//得到nums2的所有可能排列 int length=ans.size(); for(int j=0;j<length;j++) { vector<int> nums3; nums3.push_back(nums1[0]);//先把首字符打进去 for(int k=0;k<len-1;k++) nums3.push_back(ans[j][k]);//再把后续的打进去 res.push_back(nums3);//把这length个都充入res返回 } } return res; } };
分析:
痛快,在分析好要做什么之后,咔咔咔就写出来了,除了一处笔误,其他畅通无阻啊,一次提交就过了。
但是暴露的问题有,这个题情况偏简单,几乎没有边界条件,所以我分析案例不难。其次就是在迭代和循环上犹豫了好久,因为迭代中输入返回被指定了,写起来如上那么复杂,循环想了半天感觉更难写了,所以直接就用迭代硬怼了。还有就是特殊情况那里,没想到在leecode里,没有初始化的二维数组是啥都没有,本来想初始化并返回0并加个全局符号变量说明,但是题目要求返回全空,我就跟着这么写了。