【leetcode.46】全排列

news/2024/6/29 12:02:20 标签: leetcode, 全排列

                                                        全排列

一、要求

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

示例:

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

二、思路

进入初始方法中,第一层循环内,选定【1,2,3】中的第一个数1,加入到list中,形成【1】。

第一层递归,选择2,加入到list中,形成【1,2】。

第二层递归,选择3,加入到list中,形成【1,2,3】。

第三层递归,达到递归终止条件,将list加入到结果集中,形成【【1,2,3】】,并结束第三层递归。

返回到第二层递归中,删除list最后一个元素3,形成【1,2】。

返回到第一层递归中,删除list最后一个元素2,形成【1】。

返回初始方法中,进入到第二个循环中,选定2,形成【2】,依次类推.......


三、代码实现

    public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> outer = new ArrayList<List<Integer>>();
        List<Integer> list = new ArrayList<>();
        recursion(outer, list, nums);
        return outer;
    }

    public void recursion(List<List<Integer>> res, List<Integer> list, int[] nums) {
        //递归终止条件,当list长度达到数组长度时,表示找到一个排列,加入到结果队列中,并终止本层递归调用
        if (list.size() == nums.length) {
            res.add(new ArrayList<>(list));
            return;
        }
        //这部分确实有点抽象,得靠画图理解
        for (int i = 0; i < nums.length; i++) {
            if (list.contains(nums[i])) {
                continue;
            }
            list.add(nums[i]);
            recursion(res, list, nums);
            list.remove(list.size() - 1);
        }
    }

 


http://www.niftyadmin.cn/n/1705632.html

相关文章

设计模式(3)——结构性模式

在结构型模式中包含七种模式&#xff1a;适配器模式、装饰模式、桥接模式、组合模式、享元模式、代理模式、外观模式。 6. 适配器模式 将一个类的接口转换为客户希望的一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。相当于一个翻译的作用&#xff08;就…

【JAVA学习】正则表达式学习记录(1)

正则表达式学习记录&#xff08;1&#xff09; 有一次在面试的过程中&#xff0c;被问到了正则表达式&#xff0c;这一下触碰到了我的知识盲区了&#xff0c;虽然我目前还没怎么用到过正则&#xff0c;不过还是先学习一番吧。 package day1105;import java.io.*; import java…

连续子数组最大和(转)

求一个数组的相加和最大的连续子数组 思路&#xff1a; 一直累加&#xff0c;只要大于0&#xff0c;就说明当前的“和”可以继续增大&#xff0c; 如果小于0了&#xff0c;说明“之前的最大和”已经不可能继续增大了&#xff0c;就从新开始&#xff0c; resultmax{resultarr[i]…

设计模式(4)——行为型模式1

本篇博客我们说的是行为型模式&#xff0c;其中包括以下一种模式&#xff1a;观察者模式、模板方法模式、命令模式、状态模式、职责链模式、解释器模式、中介者模式、访问者模式、策略模式、备忘录模式、迭代器模式。 13.管擦者模式 定义了一种一对多的依赖关系&#xff0c;让…

【JAVA学习】如何输出一个路径底下的所有目录、文件以及目录中的文件

如何输出一个路径底下的所有目录、文件以及目录中的文件 一、设计思路 想得到某一个路径的File对象&#xff0c;如果该对象是目录的话&#xff0c;则使用该对象的listFiles列出该目录底下的所有file对象&#xff0c;形成file数组&#xff0c;遍历该file数组&#xff0c;对数组…

【JAVA】使用Socket完成客户端与服务端的双向通信

使用Socket完成客户端与服务端的双向通信 有些公司面试中常常要求白板编程&#xff0c;其中Socket编程是个出现频率比较高的题目。在此记录一下自己学习Socket编程的心得&#xff0c;做一个简单的双向通信的例子。 要求 客户端发送数据&#xff0c;服务端回显相同的数据。 服…

hdu 2014 青年歌手大奖赛_评委会打分

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2014 题目大意&#xff1a;去掉一个最高分和一个最低分求平均数。 1 #include<stdio.h>2 int main()3 {4 double n,a,i,s,max,min;5 while(scanf("%lf",&n)!EOF)6 {7 …

数学图形(2.12)spherical cycloid球面外摆曲线

查了半天也没搜到其具体的定义,先把脚本代码和截图发下. #http://www.mathcurve.com/courbes3d/cycloidspheric/cycloidspheric.shtml vertices 12000 t from 0 to (80*PI) a 10 q rand2(0.5, 10) w rand2(PI*0.1, PI*0.9) s sin(w) c cos(w)x a*[(q - c)*cos(t) c*co…