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

embedded/2025/2/9 1:07:42/

目录

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/embedded/160670.html

相关文章

市场柱线-机器人-《广东省建设现代化产业体系2025年行动计划》-提到大力发展人形机器人等具身智能机器人

中共广东省委办公厅、广东省人民政府办公厅印发《广东省建设现代化产业体系2025年行动计划》。其中提到&#xff0c;大力发展人形机器人等具身智能机器人。 300718 长盛轴承 ★主营业务:专业从事自润滑轴承的研发、生产和销售的高新技术企业&#xff0c;为各工业领域提供自润滑…

自然语言生成(NLG)算法模型评估方案的硬件配置、系统架构设计、软件技术栈、实现流程和关键代码

智能化对话中的自然语言生成&#xff08;NLG&#xff09;算法模型评估是一个复杂而多维的过程&#xff0c;它涉及多个评估指标和策略&#xff0c;以确保生成的文本质量、准确性和流畅性。 智能化对话中的NLG算法模型评估是一个涉及多个评估指标和策略的过程。通过选择合适的评估…

基于ClickHouse 和Milvus实现智能推荐系统

基于ClickHouse 和Milvus实现的智能推荐系统设计 首先&#xff0c;ClickHouse 是一个列式数据库&#xff0c; 擅长处理大规模的实时分析任务&#xff0c;尤其是像用户行为这种需要快速统计和查询的场景。Milvus 则是一个向量数据库&#xff0c;专注于高维向量的存储和检索&am…

Vue 入门到实战 八

第8章 组合API与响应性 目录 8.1 响应性 8.1.1 什么是响应性 8.1.2 响应性原理 8.2 为什么使用组合API 8.3 setup组件选项 8.3.1 setup函数的参数 8.3.2 setup函数的返回值 8.3.3 使用ref创建响应式引用 8.3.4 setup内部调用生命周期钩子函数 8.4 提供/注入 8.4.1 …

【C语言】指针详细解读3

1. 数组名的理解 我们使用指针一般访问数组内容时&#xff0c;我们可能会这样写&#xff1a; int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0]; 这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址&#xff0c;但是其实数组名本来就是地址&#xff0c;⽽…

组合总和(力扣39)

这道题又在之前的基础上进行了变形。递归是在一个集合里进行&#xff0c;但每次递归我们可以选择重复的数字&#xff0c;这代表递归时不需要缩小集合范围。但是组合的无序性仍要考虑&#xff0c;所以每一层for循环的起始值还是需要用变量控制。另外&#xff0c;我们可以事先对元…

基于深度学习的医疗器械分类编码映射系统:设计、实现与优化

一、引言 1.1 研究内容与方法 本研究旨在设计并实现一个基于深度学习的医疗器械分类编码映射系统,以解决医疗器械分类编码管理中存在的问题,提高医疗器械管理的效率和准确性。具体研究内容包括以下几个方面: 系统需求分析:深入研究国内外主流医疗器械编码体系,如中国的 …

使用媒体查询确保网页能够在手机、平板和电脑上正常浏览

为了确保网页能够在手机、平板和电脑上正常浏览&#xff0c;媒体查询的设置需要考虑到不同设备的屏幕尺寸和分辨率。以下是一些建议的像素设置范围&#xff1a; 手机 宽度设置&#xff1a;手机设备的网页宽度通常可以设置在320像素到480像素之间。这个范围可以覆盖大部分主流…