zoukankan      html  css  js  c++  java
  • [leetcode]Permutations

    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].

    【吐来个槽】还以为要输出题目中给出的顺序,折腾了很久发现,你妹,坑爹呢!哼╭(╯^╰)╮

    算法思路:

    思路2:

    dfs

    代码如下:

     1 public class Solution {
     2     List<List<Integer>> res = new ArrayList<List<Integer>>();
     3     public List<List<Integer>> permute(int[] num) {
     4         if(num == null || num.length == 0) return res;
     5         dfs(new ArrayList<Integer>(),num,new HashSet<Integer>());
     6         return res;
     7     }
     8     private void dfs(List<Integer> list,int[] num,Set<Integer> visited){
     9         if(list.size() == num.length){
    10             res.add(new ArrayList<Integer>(list));
    11             return;
    12         }
    13         for(int i = 0; i < num.length; i++){
    14             if(visited.contains(num[i])) continue;
    15             visited.add(num[i]);
    16             list.add(num[i]);
    17             dfs(list,num,visited);
    18             visited.remove(num[i]);
    19             list.remove(list.size() - 1);
    20         }
    21     }
    22 }

    思路1:

    迭代,先求出(n - 1)的排列情况,继而求出n的。

     1 public class Solution {
     2     public List<List<Integer>> permute(int[] num) {
     3         List<List<Integer>> result = new ArrayList<List<Integer>>();
     4         if(num == null || num.length == 0) return result;
     5         if(num.length == 1){
     6             List<Integer> list = new ArrayList<Integer>();
     7             list.add(num[0]);
     8             result.add(list);
     9             return result;
    10         }
    11         int[] pre = Arrays.copyOf(num, num.length - 1);
    12         int tem = num[num.length - 1];
    13         for(List<Integer> list : permute(pre)){
    14             int newLength = list.size() + 1;
    15             for(int i = 0; i < newLength; i++){
    16                 List<Integer> newList = new ArrayList<Integer>();
    17                 for(int j = 0; j < i;newList.add(list.get(j++)));
    18                 newList.add(tem);
    19                 for(int j = i; j < newLength - 1;newList.add(list.get(j++)));
    20                 result.add(new ArrayList<Integer>(newList));
    21             }
    22         }
    23         return result;
    24     }
    25 }
  • 相关阅读:
    计算最大公约数 Exercise05_14
    求满足n^2>12000的n的最大值 Exercise05_13
    依赖注入(DI)
    spring容器
    基于xml文件的bean的配置
    小试牛刀 spring的HelloWorld
    spring 装配Bean
    spring介绍
    hibernate相关类与接口
    hibernate 预习
  • 原文地址:https://www.cnblogs.com/huntfor/p/3860842.html
Copyright © 2011-2022 走看看