全排列

weblog 669 0 0

leetcode46题(中等)

原链接 https://leetcode-cn.com/problems/permutations/

问题描述

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

示例

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

解题思路

递归,具体算法用语言不好描述,具体请看代码。

代码(java)

class Solution {
        private int[] nums;
        private List<List<Integer>> list=new ArrayList<>();
        public List<List<Integer>> permute(int[] nums) {
            this.nums=nums;
            recursion(0,nums.length-1);
            return list;
        }

        public void recursion(int f,int t){
            if(f==t){
                ArrayList arrayList=new ArrayList();
                for (int i=0;i<nums.length;i++){
                    arrayList.add(nums[i]);
                }
                list.add(arrayList);
                return;
            }
            for(int i=f;i<=t;i++){
                swap(i,f);
                recursion(f+1,t);
                swap(i,f);
            }
        }

        public void swap(int i,int j){
            int t=nums[i];
            nums[i]=nums[j];
            nums[j]=t;
        }
    }

猜你喜欢
数据结构与算法 4816 递归实现算法c++描述#includeiostreamusingnamespacestd;//交换voidexchange(int*a,inti,intj){if(i==j){return
数据结构与算法 3715 外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速序,整个序过程可以递归进行,以此达到整个数据变成有序序。java实现:packagesort.fast;/***快速序*@aut
数据结构与算法 5254 十种序算法理解(前五)1.冒泡序冒泡序是一种简单的序算法。它重复地走访过要序的数,一次比较两个元素,如果它们的顺序错误就把它们交换过来。算法描述:比较相邻的元素。如果第一个比第二个大,就
工具 1682 文检索流程分析图索引库中是如何存储的?数据库的一行数据会存储为一个document对象,一条记录的一会存储为一个field,不会将数据库的所有数据都存储到索引库。索引是如何创建过程流程图1.分析
数据结构与算法 4695 序(英语:Heapsort)是指利用堆这种数据结构所设计的一种序算法。堆是一个近似完二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。以最小堆为例下沉操
数据结构与算法 1472 算法思想将待序集合以该集合中随机的一个数为分界点分成左右两个集合,一次序使其右边的集合的数据部大于左边的集合,然后再分别递归式的对左右两个集合执行上述序操作,直到递归集合没有数据,递归结束完
框架 979 lucene文检索依赖jardependencygroupIdorg.apache.lucene/groupIdartifactIdlucene-highlighter
official 719 leetcode第38题(简单)原链接:https://leetcode-cn.com/problems/count-and-say/问题描述给定一个正整数n,输出外观数的第n项。「外观数」是一
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。