zoukankan      html  css  js  c++  java
  • LeetCode46:全排列

    给定一个 没有重复 数字的序列,返回其所有可能的全排列。

    示例:

    输入: [1,2,3]
    输出:
    [
    [1,2,3],
    [1,3,2],
    [2,1,3],
    [2,3,1],
    [3,1,2],
    [3,2,1]
    ]

    采用回溯法,最简单的是回溯的同时用一个数组标记哪些数已经用过,但是这样需要额外的空间。

    可以直接把原数组分为两部分,前半部分为已经用过的数,后半部分为还没用的数,这样维护起来更加方便,也节省了空间。

     1 class Solution {
     2 public:
     3     vector<vector<int>> ret;
     4     vector<vector<int>> permute(vector<int>& nums) {
     5         backtrace(nums,0);
     6         return ret;
     7     }
     8 
     9     void backtrace(vector<int>& nums,int next){
    10         if(next==nums.size()){
    11             ret.push_back(nums);
    12             return ;
    13         }
    14         for(int i=next;i<nums.size();i++){
    15             swap(nums[i],nums[next]);
    16             backtrace(nums,next+1);
    17             swap(nums[i],nums[next]);
    18         }
    19 
    20         return ;
    21     }
    22 };
  • 相关阅读:
    第十次上机练习
    第七次作业
    第九次上机练习
    第八次上机练习
    第七次上机练习
    第六次作业
    第六次上机练习
    6.3
    5.28
    5.26
  • 原文地址:https://www.cnblogs.com/rookiez/p/13203693.html
Copyright © 2011-2022 走看看