zoukankan      html  css  js  c++  java
  • Permutations

    Given a collection of numbers, return all possible permutations.

    For example,
    [1,2,3] have the following permutations:
    [1,2,3][1,3,2][2,1,3][2,3,1][3,1,2], and [3,2,1].

    Analyse: 

        (1) Swap the 1st element with all the elements, including itself.
           (2) Then the 1st element is fixed, go to the next element.
           (3) Until the last element is fixed. Output.

    new version:

     1 class Solution {
     2 public:
     3     //swap the first number with every number in the nums vector
     4     //then fixed the new first number, and do the same process for the remaining numbers
     5     //after reaching (nums.size() - 1)'s depth, push the vector into result
     6     //then swap the two number back (backtracking to the original state)
     7     vector<vector<int>> permute(vector<int>& nums) {
     8         vector<vector<int> > result;
     9         if(nums.empty()) return result;
    10         
    11         helper(result, nums, 0);
    12         return result;
    13     }
    14     
    15     void helper(vector<vector<int> >& result, vector<int>& nums, int depth){
    16         if(depth == nums.size() - 1){
    17             result.push_back(nums);
    18             return;
    19         }
    20         
    21         for(int i = depth; i < nums.size(); i++){
    22             swap(nums[i], nums[depth]);
    23             helper(result, nums, depth + 1);
    24             swap(nums[i], nums[depth]);
    25         }
    26     }
    27 };

    Runtime: 16ms

     1 class Solution {
     2 public:
     3     vector<vector<int>> permute(vector<int>& nums) {
     4         vector<vector<int> > result;
     5         if(nums.empty()) return result;
     6         
     7         helper(result, nums, 0, nums.size() - 1);
     8         return result;
     9     }
    10     
    11     void helper(vector<vector<int> >& result, vector<int> nums, int depth, int n){
    12         if(depth == n){
    13             result.push_back(nums);
    14             return;
    15         }
    16         for(int i = depth; i < nums.size(); i++){
    17             swap(nums[depth], nums[i]);
    18             helper(result, nums, depth + 1, n);
    19             swap(nums[depth], nums[i]);
    20         }
    21     }
    22 };
  • 相关阅读:
    Jquery(智能感知AJAX,从后台调数据)
    jQuery插件(输入关键字出现提示,并可查询)
    设置缓存失效的三种方法
    关于fluorinefx基础和服务器搭建的文章地址
    关于过河问题的感悟
    .net 大文件上传
    iis7中运行cmd
    学习总结
    C#开源资源项目(转载)
    HTML数据提取
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4873385.html
Copyright © 2011-2022 走看看