LeetCode:47. 全排列 II(dfs Java)

news/2025/2/8 7:34:37/

目录

47. 全排列 II

题目描述:

实现代码与解析:

dfs

原理思路:


47. 全排列 II

题目描述:

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 8
  • -10 <= nums[i] <= 10

实现代码与解析:

dfs

class Solution {public List<List<Integer>> res = new ArrayList<List<Integer>>();public boolean[] hash;public List<List<Integer>> permuteUnique(int[] nums) {Arrays.sort(nums);hash = new boolean[nums.length];dfs(nums, 0, new ArrayList<>());return res;}public void dfs(int[] nums, int cur, List<Integer> list) {if (cur == nums.length) {res.add(new ArrayList<Integer>(list));return;}for (int i = 0; i < nums.length; i++) {if (hash[i] || (i > 0 && nums[i] == nums[i - 1] && !hash[i - 1])) {continue;}hash[i] = true;list.add(nums[i]);dfs(nums, cur + 1,  list);hash[i] = false;list.remove(list.size() - 1);}}
}

原理思路:

        dfs回溯求解,hash记录是否使用过该数字,如果已经用过跳过。

重点是这个nums[i] == nums[i - 1] && !hash[i - 1],因为需要去掉重复的,因为里面有重复的数字,所以每个位置可能重复,先排序,然后判断,如果和上一个数相同,并且上一个数没有使用过的话就跳过。


http://www.ppmy.cn/news/1570274.html

相关文章

SQLite更新版本

下载并编译最新版本&#xff1a; 访问 SQLite 官网 下载最新版本的源码&#xff08;如 3.44.2&#xff09;。 解压并编译&#xff1a;wget https://www.sqlite.org/2024/sqlite-autoconf-3440200.tar.gz tar -xzvf sqlite-autoconf-3440200.tar.gz cd sqlite-autoconf-3440200…

【C语言】球球大作战游戏

目录 1. 前期准备 2. 玩家操作 3. 生成地图 4. 敌人移动 5. 吃掉小球 6. 完整代码 1. 前期准备 游戏设定:小球的位置、小球的半径、以及小球的颜色 这里我们可以用一个结构体数组来存放这些要素,以方便初始化小球的信息。 struct Ball {int x;int y;float r;DWORD c…

获取阿里云nacos注册接口状态

获取阿里云nacos注册接口状态 import json import time import nacos # 注册客户端 def nacos_client():# 配置日志记录# Nacos服务器地址SERVER_ADDRESSES "http://127.0.0.1:8848"# 命名空间ID&#xff08;可选&#xff09;NAMESPACE "46c54160-9dd9-4f218…

20250207下载VMware17.6.2的步骤

20250207下载VMware17.6.2的步骤 2025/2/7 16:10 缘起&#xff0c;需要在Ubuntu20.04中安装Ubuntu22.04来验证中科创达/高通CM6125的Android11的编译环境。 到处找最新的VMware17.6.2的下载链接。 找来找去&#xff0c;都要进VMware官网&#xff0c;最后导入了博通的官网来下载…

代码随想录算法【Day37】

Day37 完全背包 特点&#xff1a;每个物品可以使用无数次 循环顺序&#xff1a; 将01背包里面讲的倒序遍历&#xff0c;改为正序遍历就是完全背包了 一维dp数组的01背包必须要先遍历物品&#xff0c;再遍历背包&#xff0c;而完全背包可以先遍历背包&#xff0c;再遍历物品…

分布式kettle调度平台- web版转换,作业编排新功能介绍

介绍 Kettle&#xff08;也称为Pentaho Data Integration&#xff09;是一款开源的ETL&#xff08;Extract, Transform, Load&#xff09;工具&#xff0c;由Pentaho&#xff08;现为Hitachi Vantara&#xff09;开发和维护。它提供了一套强大的数据集成和转换功能&#xff0c…

通向AGI之路:人工通用智能的技术演进与人类未来

文章目录 引言:当机器开始思考一、AGI的本质定义与技术演进1.1 从专用到通用:智能形态的范式转移1.2 AGI发展路线图二、突破AGI的五大技术路径2.1 神经符号整合(Neuro-Symbolic AI)2.2 世界模型架构(World Models)2.3 具身认知理论(Embodied Cognition)三、AGI安全:价…

开源安全一站式构建!开启企业开源治理新篇章

在如今信息技术日新月异、飞速发展的数字化时代&#xff0c;开源技术如同一股强劲的东风&#xff0c;为企业创新注入了源源不断的活力&#xff0c;然而&#xff0c;正如一枚硬币有正反两面&#xff0c;开源技术的广泛应用亦伴随着不容忽视的挑战。安全风险如影随形&#xff0c;…