当前位置: 首页 > news >正文

全排列 II

题目链接

全排列 II

题目描述

注意

  • 1 <= nums.length <= 8
  • -10 <= nums[i] <= 10
  • 数组包含重复数字
  • 全排列不可重复

解答思路

  • 因为排列组合不能重复,所以先将数组进行排序,如果在某一层已经用过某个相同数字,则跳过后续该数字的排列
  • 深度优先遍历找到所有组合,每一层需要从头开始遍历,寻找所有情况,使用visited存储该元素在之前是否使用过,在判断完使用该元素的组合后,需要移除该元素,也就是回溯

代码

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

关键点

  • 深度优先遍历的思想
  • 怎样保证有重复元素的数组中排列组合不重复:如果当前元素在之前已经使用过,则跳过该元素;如果当前元素与上一个元素相等,且上一个元素在该层已经使用过(前几层未使用),则跳过该元素
http://www.dtcms.com/a/286748.html

相关文章:

  • C#通过HslCommunication连接西门子PLC1200,并防止数据跳动的通用方法
  • 反序列化漏洞2-魔术方法介绍与演示
  • 怎么自己搭建云手机
  • http与https的主要区别是什么?
  • java数据类型
  • 锂电池无线充电电路设计
  • 零碳园区势在必行!安科瑞EMS3.0助力园区低碳智慧升级
  • Excel导出实战:从入门到精通 - 构建专业级数据报表的完整指南
  • 如何使用 Jackson 处理 YAML
  • AE电源MDX 5K 10K 15K 20K 25K 30K手侧操作使用说明
  • 拉普拉斯方程傅里叶积分解法
  • @Primary 是做什么的?
  • CAD 约束求解:核心技术原理、流程及主流框架快速解析
  • A33-vstar笔记及资料分享:搭建交叉编译环境
  • 动态规划 + DFS + 记忆化!Swift 解 LeetCode 329 的实战笔记
  • 实战指南|智慧无人机安防系统搭建全流程解析
  • 记录DataGrip 2025.1.3破解失败后,无法重启问题修复
  • centos7安装MySQL8.4手册
  • Hive数据仓库工具
  • 甲状腺结节TI-RADS分类的多目标分类头任务深度学习模型评估报告
  • go语言学习之包
  • 新书推介 | 吉林大学出版教材《汽车智能辅助驾驶系统技术》,国产仿真工具链GCKontrol-GCAir教学应用
  • Python_2
  • math.h函数
  • 弱网测试
  • 跨域问题及解决方案
  • ChatGPT Agent:统一端到端Agentic模型的技术革新与行业影响
  • React + Mermaid 图表渲染消失问题剖析及 4 种代码级修复方案
  • 前端-CSS盒模型、浮动、定位、布局
  • 前端迟迟收不到响应,登录拦截器踩坑!