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

leetcode思路-回溯相关(46.全排列、78.子集、17.电话号码的字母组合)

46.全排列给定一个不含重复数字的数组nums返回其所有可能的全排列。你可以按任意顺序返回答案。思路使用成员变量nums和res维护当前排列以及所有列举过的排列固定前缀递归地对后续元素进行排列组合每生成一个完整的答案时就回溯返回到上一级//存储当前排列 ListInteger nums; //存储所有排列 ListListInteger res; public ListListInteger permute(int[] nums) { this.nums new ArrayList(); this.res new ArrayList(); //初始化nums for(int num:nums){ this.nums.add(num); } //固定第一位开始排列组合也就是固定nums[0] DFS(0); return res; } //当前递归做的事情 //将当前位数的数字分别与其后置位每个数字交换一次然后进到下一层递归注意每次递归完后要进行回溯 void DFS(int x){ //如果当前固定的位数已经是倒数第二位那么不需要再进行排列组合 // 因为后面只有一位数没人跟它交换 if(x nums.size() - 1){ res.add(new ArrayList(nums)); return; } for(int i x;i nums.size();i){ swap(i,x); //将该固定的首位向右移动一位达到进入下一层递归的效果 DFS(x 1); //回溯 swap(i,x); } } void swap(int i,int x){ int temp nums.get(i); nums.set(i,nums.get(x)); nums.set(x,temp); }78.子集给你一个整数数组nums数组中的元素互不相同。返回该数组所有可能的子集幂集。解集不能包含重复的子集。你可以按任意顺序返回解集。思路使用成员变量ans和path维护所有子集和当前路径从第一个元素开始递归地进行选择要么添加进当前路径、要么不添加直到选择的次数与集合内元素数量相等即一个子集构建完成、将当前路径加入ans中。注意每个路径选择完成后都要进行回溯保护每个路径构建过程独立不受干扰。ListListInteger ans; ListInteger path; public ListListInteger subsets(int[] nums) { this.ans new ArrayList(); this.path new ArrayList(); DFS(0,nums); return ans; } public void DFS(int i,int[] nums){ //全部选择完成将当前路径添加到子集集合中 if(i nums.length){ ans.add(new ArrayList(path)); return; } //如果不选择当前元素 DFS(i 1,nums); //如果选择当前元素 path.add(nums[i]); DFS(i 1,nums); //回溯 path.remove(path.size() - 1); }17.电话号码的字母组合给定一个仅包含数字2-9的字符串返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下与电话按键相同。注意 1 不对应任何字母。思路使用成员变量ans维护所有可能字母组合使用一个变量代表递归次数也就是当前路径长度当前递归做的事情对当前传入的电话号码选择一个其代表的字母选择哪个字母由当前遍历的次数决定添加到路径里路径长度加一进入下一层递归结束递归条件路径长度满足传入电话号码数量public final String[] MAP new String[]{,,abc, def, ghi, jkl, mno, pqrs, tuv, wxyz}; ListString ans; public ListString letterCombinations(String digits) { ans new ArrayList(); int n digits.length(); if (n 0) { return List.of(); } char[] path new char[n]; DFS(0,digits.toCharArray(),path); return ans; } void DFS(int i,char[] digits,char[] path){ if(i digits.length){ ans.add(new String(path)); return; } int n digits[i] - 0; for(char c:MAP[n].toCharArray()){ path[i] c; DFS(i 1,digits,path); } }
http://www.rkmt.cn/news/1385950.html

相关文章:

  • 第2章:AI辅助Solidity语法精讲——变量、函数与修饰器
  • MQTT协议:物联网通信的核心利器
  • 2026年,揭秘那些真正安全的原生态食材厂家你不可不知的秘密
  • OmenSuperHub:惠普OMEN游戏本性能控制的终极开源解决方案
  • Unity编辑器黑屏崩溃?Windows TDR超时机制详解与安全调优
  • 腾讯字节“短视频猪食论”争执再现?抖音副总裁李亮:我没说过,其他高管也没有
  • 国内环保涂料供应商排行 四大权威品牌综合实力测评
  • 思源宋体完全配置指南:5分钟掌握免费商用中文排版方案
  • 2026年DPAK:200VMOS、300VMOS、60VMOS、DPAKMOS、MOSFET、N沟道MOS、P沟道MOS选择指南 - 优质品牌商家
  • AI中医为什么总“不准”?知医邦6个开关打通AI中医诊断行业堵点
  • 用python处理excel数据,将打印日志整理成表格并比较数据
  • 伺服驱动器全解析:核心作用、工作原理与前沿应用
  • 2026年当下广西护栏网批发厂家选哪家?资深行业分析师的专业推荐指南 - 2026年企业推荐榜
  • 终极Hyper-V设备直通解决方案:DiscreteDeviceAssigner图形化工具完整指南
  • 聊聊2026年的账号防封:别再只拿代理IP当背锅侠了
  • Google发布A2A协议v1.2:AI Agent互联网的TCP/IP之争正式打响
  • NY448固态MT29F32T08GSLBHL8-36QB:B
  • STM32定时器输入捕获测频原理详解:从555电路到LCD显示的完整信号链分析
  • Stagehand 框架入门:原生 Playwright 与 AI 自然语言操作的完美混合
  • 电子负载散热改造:双面散热方案让TO-247 MOSFET功率提升50%
  • 新型高性能钢框架-支撑结构体系理论及试验优化算法【附代码】
  • Unity 2022安装深度解析:模块依赖、Hub配置与离线部署实战
  • 开源自动驾驶系统openpilot:从机器人操作系统到300+车型支持的深度技术解析
  • 枚举状态码,统一返回码和策略模式的初步学习
  • 国家软考中级·信息安全工程师:全网最硬核备考拆解
  • 翡翠工厂直销靠谱吗?和传统实体珠宝店有什么区别?
  • Onekey终极指南:如何5分钟快速获取Steam游戏清单的免费神器
  • 录音会议纪要整理不同使用场景,实用口碑选择建议
  • ARIMA与LSTM双模型实战:构建金融时间序列预测系统
  • UVM中m_sequencer和p_sequencer的用法与应用场景