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并加个全局符号变量说明,但是题目要求返回全空,我就跟着这么写了。

posted @ 2019-03-25 10:53  深夜十二点三十三  阅读(146)  评论(0编辑  收藏  举报