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

2025年- H68-Lc176--46.全排列(回溯,组合)--Java版

1.题目描述

在这里插入图片描述

2.思路

(1)终止条件:当path.size()==nums.size()说明要到收获的结果了(也就是叶子节点)。
(2)思路
使用一个临时列表 cur 表示当前构造中的排列;

每次递归遍历 nums 中还未使用的元素;

达到终止条件后将 cur 加入结果集中;

用回溯法(递归 + 回退)尝试所有可能。
(3)cur.remove(cur.size()-1)
假设 cur 列表目前是 [1, 2, 3],此时调用 cur.remove(cur.size() - 1) 后:

cur.size() = 3

cur.size() - 1 = 2

所以 cur.remove(2) 就是移除索引为 2 的元素,即移除 3,此时 cur 变成 [1, 2]。

3.代码实现

class Solution {public List<List<Integer>> permute(int[] nums) {//res:用于保存所有的排列结果。List<List<Integer>> res=new ArrayList<>();//cur:当前正在构造的排列序列。List<Integer> cur=new ArrayList<>();//调用回溯函数开始递归构造所有排列。backtracking(res,cur,nums);//返回最终的所有排列结果。return res;}private static void backtracking(List<List<Integer>> res,List<Integer> cur,int[] nums){//终止条件,排序序列的长度等于数组长度if(cur.size()==nums.length){res.add(new ArrayList<>(cur));}//定义回溯方法,递归地构造排列。for(int i=0;i<nums.length;i++){if(!cur.contains(nums[i])){//遍历 nums 中的所有元素,尝试每个元素加入当前排列 cur。// 如果当前元素还未被使用(即不在当前排列 cur 中),则继续处理。防止重复使用同一个元素。cur.add(nums[i]);//选择这个元素,加入到当前排列中。backtracking(res,cur,nums);//撤销选择(回溯):将当前选择的元素移除,为下一轮尝试其他可能性做好准备。cur.remove(cur.size()-1);}}//遍历 nums 中的所有元素,尝试每个元素加入当前排列 cur。}
}

相关文章:

  • Shiro安全权限框架
  • CCPC题目
  • [特殊字符] 深度剖析 n8n 与 Dify:使用场景、优劣势及技术选型建议
  • 性能剖析:在 ABP 框架中集成 MiniProfiler 实现性能可视化诊断
  • 《射频识别(RFID)原理与应用》期末复习 RFID第二章 RFID基础与前端(知识点总结+习题巩固)
  • 跨域请求解决方案全解析
  • Orthanc:轻量级PACS服务器与DICOMweb支持的技术详解
  • 防火墙设置实战操作案例(小白的“升级打怪”成长之路)
  • 如何搭建Z-Blog PHP版本:详细指南
  • 论文阅读笔记——Large Language Models Are Zero-Shot Fuzzers
  • 网络编程及原理(一)
  • 化学方程式配平免费API接口教程
  • Flutter、React Native 项目如何搞定 iOS 上架?从构建 IPA 到上传 App Store 的实战流程全解析
  • SVM超详细原理总结
  • 系统调试——ADB 工具
  • 使用 React Native 开发鸿蒙运动健康类应用的​​高频易错点总结​​
  • 智能合约安全漏洞解析:从 Reentrancy 到 Integer Overflow
  • C#由于获取WPF窗口名称造成的异常报错问题
  • unix/linux,sudo,其历史争议、兼容性、生态、未来展望
  • unix/linux,sudo,其发展历程详细时间线、由来、历史背景
  • 200M电信宽带做网站/谷歌推广开户
  • 合肥网站推广优化/百度推广竞价
  • 网站小程序app定制开发/seo分析师招聘
  • 天津做网站首选津坤科技b/竞价广告
  • 网页设计师需要学什么专业/太原seo培训
  • 跨境电子商务网页制作与网站建设/站长网站查询