DFS和回溯专题:全排列 II

    DFS和回溯专题:全排列 II

题目链接: 全排列 II

参考题解 代码随想录

题目描述

在这里插入图片描述

代码纯享版

class Solution {

    public List<List<Integer>> list_all = new ArrayList();
    public List<Integer> list = new ArrayList();
    public int[] res;
    public List<List<Integer>> permuteUnique(int[] nums) {
        Arrays.sort(nums);
        res = new int[nums.length];
        backtrack(nums);
        return list_all;
    }

    void backtrack(int[] nums){

        if(list.size() == nums.length){
            list_all.add(new ArrayList(list));
            return;
        }


        for(int i = 0; i < nums.length; i++){
            if(i > 0 && nums[i] == nums[i - 1] && res[i - 1] == 0){
                continue;
            }
            if(res[i] == 0){
                list.add(nums[i]);
                res[i] = 1;
                backtrack(nums);
                res[i] = 0;
                list.remove(list.size() - 1);
            }
            
        }
    }
}

代码逐行解析版

class Solution {

    public List<List<Integer>> list_all = new ArrayList();
    public List<Integer> list = new ArrayList();
    public int[] res; 

    public List<List<Integer>> permuteUnique(int[] nums) {
        Arrays.sort(nums); //先对数组nums进行sort排序
        res = new int[nums.length]; //数组res用来判断对应位置的数是否用过:0为没用,1为用过
        backtrack(nums);
        return list_all;
    }

    void backtrack(int[] nums){

        if(list.size() == nums.length){ //如果list列表长度与nums数组长度相同
            list_all.add(new ArrayList(list)); //将list添加到list_all
            return;
        }


        for(int i = 0; i < nums.length; i++){

            //剪枝:nums[i]==nums[i-1]而res[i-1]为0,
            //说明同一树层上有两个重复的元素nums[i)和nums[i-1],不可以重复选取      
            if(i > 0 && nums[i] == nums[i - 1] && res[i - 1] == 0){ 
                continue;
            }
            if(res[i] == 0){ //res[i]未被使用
                list.add(nums[i]); //将该数字添加到list列表中
                res[i] = 1; //将该数字标记为已使用过

                backtrack(nums); //递归
                //将列表list的最后一个数字去掉,同时还原标记
                res[i] = 0;
                list.remove(list.size() - 1);
            }
            
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/574293.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NVIDIA CUDA Toolkit

NVIDIA CUDA Toolkit CUDA Toolkit 12.4 Update 1 Downloads | NVIDIA Developer CUDA Toolkit是用于CUDA开发的软件包&#xff0c;主要包括CUDA编译器、运行时库、GPU驱动程序和开发工具等。它允许开发者使用通用编程语言&#xff08;如C、C&#xff09;来利用NVIDIA GPU进行…

echart-better基于最新的echarts5.5标题旋转功能

使用教程以及相关的echarts-better最新的包在这里&#xff1a;https://edu.csdn.net/course/detail/24569 echarts在侧边竖向展示标题&#xff0c;以及次标题 主标题和次标题进行旋转&#xff0c;适用于移动端或其他场景。

如何安装mysl驱动程序jar包

简介&#xff08;为什么要安装mysql驱动jar包&#xff09; MySQL 驱动程序&#xff08;通常以 JAR 文件的形式提供&#xff09;用于在 Java 应用程序中连接和与 MySQL 数据库进行交互。这些驱动程序提供了一组 API&#xff0c;使 Java 应用程序能够执行诸如查询、插入、更新和…

大数据真题讲解系列——拼多多数据分析面试题

拼多多数据分析面试题&#xff1a;连续3次为球队得分的球员名单 问题&#xff1a; 两支篮球队进行了激烈的比赛&#xff0c;比分交替上升。比赛结束后&#xff0c;你有一个两队分数的明细表&#xff08;名称为“分数表”&#xff09;。表中记录了球队、球员号码、球员姓名、得…

parallels desktop 19密钥分享 附PD虚拟机安装教程 支持M/intel

PD19虚拟机安装破解教程 Parallels Desktop 百度网盘下载&#xff1a;https://pan.baidu.com/s/1ezQmJAjIx796NEr9WZbcOg 提取码: 8w61 &#xff08;地址容易失效&#xff0c;来之不易&#xff0c;务必点赞和收藏&#xff0c;如果失效了请到评论区留言反馈&#xff09; 注意&…

猫咪吃主食罐头的好处盘点,附高营养高适口猫罐头推荐清单

关于是否要给猫咪喂食罐头&#xff0c;这可真是个让人头疼的争议话题啊&#xff01;有的猫主人觉得&#xff0c;罐头能让猫咪尝到更多美味&#xff0c;营养也更全面&#xff1b;而有些则觉得&#xff0c;猫粮就足够了&#xff0c;何必多此一举呢&#xff1f;作为一位拥有两只6岁…

LeetCode54. 螺旋矩阵

LeetCode54.螺旋矩阵 题解思路 代码 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> res;int n matrix.size();// 行int m matrix[0].size(); // 列vector<vector<bool>> st(n, v…

C#基础|构造方法相关

哈喽&#xff0c;你好&#xff0c;我是雷工。 以下为C#方法相关的学习笔记。 01 方法的概述 概念&#xff1a;方法表示这个对象能够做什么&#xff0c;也就是封装了这个对象行为。 类型&#xff1a;实例方法—>静态方法&#xff08;抽象方法、虚方法&#xff09;—>特殊…

阿斯达年代记下载注册+短信验证教程分享

阿斯达年代记&#xff1a;三强争霸》预计将于4月24日盛大发布&#xff0c;标志着一款新颖的MMORPG游戏面世&#xff0c;它跨越安卓、苹果和PC三大平台&#xff0c;实现数据互通&#xff0c;满足多元化玩家群体的需求。无论是追求移动便捷的手游爱好者&#xff0c;还是偏爱高性能…

揭秘神器:智能私信破局获客难!

在数字营销的海洋中&#xff0c;每个企业都如同一艘努力航行的船&#xff0c;希望能在广阔的客户蓝海中获得丰收。然而&#xff0c;现实却往往充满挑战&#xff0c;尤其是当面对如何吸引并维系客户这一核心难题时。传统的获客手段逐渐显得力不从心&#xff0c;而智能科技的介入…

OpenHarmony语言基础类库【@ohos.util.Deque (线性容器Deque)】

Deque&#xff08;double ended queue&#xff09;根据循环队列的数据结构实现&#xff0c;符合先进先出以及先进后出的特点&#xff0c;支持两端的元素插入和移除。Deque会根据实际需要动态调整容量&#xff0c;每次进行两倍扩容。 Deque和[Queue]()相比&#xff0c;Queue的特…

Postman获取接口返回值设置为变量

//设置环境变量&#xff0c;提取token // 把responseBody转为json字符串 var jsonData JSON.parse(responseBody); // 设置环境变量&#xff0c;提取token pm.environment.set("Authorization", jsonData.token_type " " jsonData.access_token); //设…

如何分析和优化慢sql语句

前言 sql查询速度比较慢容易成为性能瓶颈,这时我们可以优化我们的sql语句或数据库表 一般sql语句执行很慢的种类分为: 1.聚合查询 2.多表查询 3.表数据量过大查询 4.深度分页查询 这四种的前三种都可以通过优化sql语句来优化sql查询速度 正文 聚合查询 我们可以通过尝…

洗地机什么牌子比较好?4款洗地机品牌型号深度推荐

随着科技的不断发展&#xff0c;清洁工具也在不断进化。手持洗地机作为一种新型的清洁工具&#xff0c;因其便捷、高效的特点受到了消费者的青睐。然而&#xff0c;市场上的洗地机品牌众多&#xff0c;消费者在选择时常常感到困惑。那么&#xff0c;哪些洗地机品牌在口碑上表现…

FinalShell 安装 及使用教程

一 简介&#xff1a; FinalShell 是一款免费的国产的集 SSH 工具、服务器管理、远程桌面加速的良心软件&#xff0c;同时支持 Windows,macOS,Linux&#xff0c;它不单单是一个 SSH 工具&#xff0c;完整的说法应该叫一体化的的服务器&#xff0c;网络管理软件&#xff0c;在很…

记录一个Maxwell采集MySQL数据时报安全证书时间不通过的问题

【背景描述】 我的zk&#xff0c;kafka和Maxwell都正常启动了 此时我需要用Maxwell将MySQL的一张表user_info将其全量同步到kafka当中时发生报错&#xff0c;命令如下&#xff1a; [atguiguhadoop102 datas]$ /opt/module/maxwell/bin/maxwell-bootstrap --database gmall --…

3、Flink执行模式(流/批)详解(上)

0、批模式和流模式对比表 类别流模式批模式任务调度所有任务需要持续运行&#xff0c;消耗资源大任务可以按Shuffle分阶段执行&#xff0c;消耗资源小Shuffle记录会被流水线式的持续发送到下游任务&#xff0c;在网络上进行缓冲可以保存Shuffle分阶段执行的中间结果State Back…

Linux的UDEV机制

udev 机制引入&#xff1a; 手机接入Linux热拔插相关 a. 把手机接入开发板 b. 安装adb工具&#xff0c;在终端输入adb安装指令&#xff1a; sudo apt-get install adb c. dmeg能查看到手机接入的信息&#xff0c;但是输入adb devices会出现提醒 dinsufficient permissions for …

Instagram运营5大技巧,防封攻略

对于企业和个人而言&#xff0c;运营Instagram已成为吸引流量、增加曝光、提升品牌知名度的重要手段。然而&#xff0c;许多人在初次尝试Ins运营时可能会遇到困难&#xff0c;不知道从何入手。本文将为您分享五大技巧&#xff0c;帮助您更好地运营Instagram&#xff0c;吸引更多…

【文章转载】Lance Martin的关于RAG的笔记

转载自微博黄建同学 从头开始学习 RAG&#xff0c;看Lance Martin的这篇笔记就行了&#xff0c;包含了十几篇论文和开源实现&#xff01; —— 这是一组简短的&#xff08;5-10 分钟视频&#xff09;和笔记&#xff0c;解释了我最喜欢的十几篇 RAG 论文。我自己尝试实现每个想…