zoukankan      html  css  js  c++  java
  • [leetcode]46. Permutations全排列(给定序列无重复元素)

    Given a collection of distinct integers, return all possible permutations.

    Input: [1,2,3]
    Output:
    [
      [1,2,3],
      [1,3,2],
      [2,1,3],
      [2,3,1],
      [3,1,2],
      [3,2,1]
    ]

    题意:

    打印全排列

    Solution1: Backtracking

    形式化的表示递归过程:permutations(nums[0...n-1]) = {取出一个数字} + permutations(nums[0...n-1] - 该数字)

    code

     1 /*
     2 Time: O(n!)
     3 Space: O(n!). We allocate space to keep N! paths.
     4 */
     5 
     6 
     7 class Solution {
     8     public List<List<Integer>> permute(int[] nums) {
     9         List<List<Integer>> result = new ArrayList<>();
    10         // corner case
    11         if (nums == null || nums.length == 0) return result;
    12         List<Integer> path = new ArrayList<>();
    13         helper(nums, path, result);
    14         return result; 
    15     }
    16     
    17     private void helper(int[] nums, List<Integer> path, List<List<Integer>> result){
    18         // base case
    19         if(path.size() == nums.length){
    20             result.add(new ArrayList<>(path));
    21             return;
    22         }
    23         
    24         for(int i = 0; i< nums.length; i++){
    25             if(path.contains(nums[i])) continue;
    26             path.add(nums[i]);
    27             helper(nums, path, result);
    28             path.remove(path.size() - 1);
    29         }
    30     }
    31 }
  • 相关阅读:
    读《猫城记》 | 人间失格
    如果这都算是佛系
    常规流(Normal flow)
    页面重绘(repaint)和回流(reflow)
    display:none和visiblity:hidden区别
    读《人类简史》 | 一本很值得读的书
    Mac shell笔记
    读《围城》
    珠海游记
    mouseout、mouseover和mouseleave、mouseenter区别
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/9201935.html
Copyright © 2011-2022 走看看