20天刷题计划-46. 全排列

简介: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2:输入:nums = [0,1] 输出:[[0,1],[1,0]] 示例 3:输入:nums = [1] 输出:[[1]]

一、题目描述:

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

示例 1:

输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2:

输入:nums = [0,1] 输出:[[0,1],[1,0]] 示例 3:

输入:nums = [1] 输出:[[1]]

提示:

1 <= nums.length <= 6 -10 <= nums[i] <= 10 nums 中的所有整数 互不相同

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/pe…

二、思路分析:

利用回溯的思想,终止条件:当output中的元素个数为n时说明这种排列完成,传入res

步骤如下:

首先初始化当len(nums)=1的情况,即result[0]=[[nums[0]]],

然后利用result[0]的结果来求解result[1],

求得result[1]后再利用result[1]来求解result[2],等等以此类推,

直到求出result[len(nums)-1],并返回该值。

三、AC代码

class Solution {
    public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> res = new ArrayList<List<Integer>>();
        List<Integer> output = new ArrayList<Integer>();
        for (int num : nums) {
            output.add(num);
        }
        int n = nums.length;
        backtrack(n, output, res, 0);
        return res;
    }
    public void backtrack(int n, List<Integer> output, List<List<Integer>> res, int first) {
        // 所有数都填完了
        if (first == n) {
            res.add(new ArrayList<Integer>(output));
        }
        for (int i = first; i < n; i++) {
            // 动态维护数组
            Collections.swap(output, first, i);
            // 继续递归填下一个数
            backtrack(n, output, res, first + 1);
            // 撤销操作
            Collections.swap(output, first, i);
        }
    }
}

四、总结:

网络异常,图片无法展示
|

找回溯的三个步骤:

1.找输入输出的参数,一般根据后两个步骤确定所需传入的参数

2.找递归终止条件

3.找单层递归逻辑

掘友们,解题不易,如果觉得有用就留下个赞或评论再走吧!谢啦~ 💐



相关文章
|
4月前
|
分布式计算 Java 大数据
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
292 2
|
Python
Python中的进制转换
Python中的进制转换
338 0
|
JavaScript Java 测试技术
基于springboot+vue.js的系统附带文章和源代码设计说明文档ppt
基于springboot+vue.js的系统附带文章和源代码设计说明文档ppt
365 1
|
安全 数据安全/隐私保护 Windows
DameWare远程连接设置
DameWare远程连接设置
280 2
|
机器学习/深度学习 人工智能 算法
|
算法 安全 开发者
Copilot使用技巧
Copilot使用技巧
412 1
Copilot使用技巧
Xpath高阶定位技巧,轻松玩转App测试元素定位!
XPath是一种用于XML文档中节点定位的语言,支持逻辑运算符(and、or、not)、轴定位、谓词和内置函数。
|
移动开发 安全 前端开发
〔支付接入〕微信的 h5 支付和 jsapi 支付
学会微信支付,打开你的财富之门
510 2
〔支付接入〕微信的 h5 支付和 jsapi 支付
|
数据安全/隐私保护 网络虚拟化 开发者
Appuploader:常见错误及解决方法指南
Appuploader是一款用于上传、管理和分享iOS应用的客户端工具。使用Appuploader可以让您更加便捷地管理和分享您的应用程序,同时也能够提高工作效率。本文将介绍一些常见的Appuploader错误及其解决方法。
|
Ubuntu
不常用但是必会的Ubuntu 关机命令
对于常年保持在线服务的服务器系统,通常关机指令不会用到,即便有需要用到,也是重启命令用的会很多。关机常常会在限电、突然长时间停电影响机房供电,业务下线停止运营等情况下。虽然极不常用,但是仍然需要掌握关机命令,以备不时之需。
1007 0