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

  • 相关阅读:
    Java 多态
    HDFS读写原理
    HDFS详解
    Servlet基础
    Tomcat
    HTTP简介
    JDBC技术
    final、finally和finalize
    java 中的权限修饰符
    进程、线程、线程状态、多线程实现方法
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/10592499.html
Copyright © 2011-2022 走看看