• 46. Permutations


    Given a collection of distinct 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],
      [3,2,1]
    ]
    题目含义:求给定向量数组所有元素的全排列问题。

     1 class Solution {
     2     
     3     List<List<Integer>> res = new ArrayList<List<Integer>>();
     4     int[] nums = null;
     5     
     6     private void swapValue(int left, int right) {
     7         int temp = this.nums[left];
     8         this.nums[left] = this.nums[right];
     9         this.nums[right] = temp;
    10     }
    11     
    12     private void pailie(int position) {
    13         if (position == this.nums.length) {
    14             List<Integer> temp = new ArrayList<Integer>();
    15             for (int num : this.nums) temp.add(num);
    16             this.res.add(temp);
    17         }
    18         for (int i = position; i < this.nums.length; i++) {
    19             swapValue(i, position);
    20             pailie(position + 1);
    21             swapValue(i, position);
    22         }
    23     }
    24     
    25     public List<List<Integer>> permute(int[] nums) {
    26 //        http://blog.csdn.net/happyaaaaaaaaaaa/article/details/51534048
    27 //        全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为例说明如何编写全排列的递归算法。
    28 //        1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。由于一个数的全排列就是其本身,从而得到以上结果。
    29 //        2、再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4 3 5、 4 5 3、 5 3 4、 5 4 3 六组数。即以3开头的和4,5的全排列的组合、
    30 //           以4开头的和3,5的全排列的组合和以5开头的和3,4的全排列的组合。
    31 //        从而可以推断,设一组数p = {r1, r2, r3, ... ,rn}, 全排列为perm(p),pn = p - {rn}。因此perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), ... , rnperm(pn)。
    32 //       当n = 1时perm(p} = r1。为了更容易理解,将整组数中的所有的数分别与第一个数交换,这样就总是在处理后n-1个数的全排列。
    33         this.nums = nums;
    34         pailie(0);
    35         return res;
    36     }
    37 }
  • 相关阅读:
    数据库表结构查询SQL
    Java实现数据库备份并利用ant导入SQL脚本
    生死看淡,不服就干。SQL常见的一些优化。
    mybatis + PageHelper 实现分页
    自定义数据库连接池实现方式 MySQL
    Docker 镜像基础(三)
    Docker 镜像管理及基础命令(二)
    Docker 介绍和安装(一)
    Docker 镜像管理及基础命令(二)
    Tomcat-8 安装和配置
  • 原文地址:https://www.cnblogs.com/wzj4858/p/7725491.html
Copyright © 2020-2023  润新知