• 46. Permutations -- 解题报告 -- C++


    1. 题目分析

    这道题求输入数组的全排列,并且数组中的所有数字都不同。

    2. 思路:交换生成

    例如:输入【1,2,3】

    步骤一:生成【1】

    步骤二:先将2插入[1]的后面,生成【1,2】,然后将"2"前面的数字依次和"2"进行交换,生成【2,1】

    步骤三:分别对【1,2】和【2,1】进行第二步的操作:

    【1,2】,插入3生成【1,2,3】,将"3"前面的数字依次和"3"进行交换,生成【3,2,1】【1,3,2】

    【2,1】,插入3生成【2,1,3】,将"3"前面的数字依次和"3"进行交换,生成【3,1,2】【2,3,1】

    此时,3为输入数组中的最后一个元素,所以输出结果:【1,2,3】,【3,2,1】,【1,3,2】,【2,1,3】,【3,1,2】,【2,3,1】

    若3不为输入数组中的最后一个元素,则分别对上面的结果进行步骤3的操作。

    上述过程可以用递归或者迭代实现:

    递归代码(C++,12ms):

     1 class Solution {
     2 public:
     3     vector<vector<int>> permute(vector<int>& nums) 
     4     {
     5         vector<vector<int>> res;
     6         if(0 == nums.size())
     7             return res;
     8         vector<int> subres;
     9         int start = 0;
    10         recur(nums,res,subres,start);
    11         return res;
    12     }
    13     void recur(vector<int>& nums,vector<vector<int>>& res,vector<int> subres,int next)
    14     {
    15         bool last = false;
    16         subres.push_back(nums[next]);
    17         if(next == nums.size()-1)
    18         {
    19             res.push_back(subres);
    20             last = true;
    21         }
    22         else
    23         {
    24             recur(nums,res,subres,next+1);
    25         }
    26         for(int i=0;i<next;i++)
    27         {
    28             vector<int> temp(subres);
    29             int tempint = temp[i];
    30             temp[i] = temp[next];
    31             temp[next] = tempint;
    32             if(true == last)
    33                 res.push_back(temp);
    34             else
    35                 recur(nums,res,temp,next+1);
    36         }
    37     }
    38 };
  • 相关阅读:
    jbpm入门样例
    MinGW 介绍
    Linux守护进程的编程实现
    完毕port(CompletionPort)具体解释
    Linux makefile 教程 很具体,且易懂
    mysql数据文件迁移到新的硬盘分区的方法
    winform正在使用dsoframer迅速&quot;Unable to display the inactive document.Click here to reacitive the document.&quot;
    Android学习路径(七)建立Action Bar
    FreeBSD包管理
    BZOJ 1096 ZJOI2007 仓库建设 边坡优化
  • 原文地址:https://www.cnblogs.com/jingjingblog/p/9117779.html
Copyright © 2020-2023  润新知