news 2026/7/27 21:52:38

算法面试——回溯算法:全排列、组合、子集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法面试——回溯算法:全排列、组合、子集

回溯算法本质上就是暴力穷举,优化一下叫剪枝。难点在于理解递归树和撤销选择。

一、全排列

publicList<List<Integer>>permute(int[]nums){List<List<Integer>>result=newArrayList<>();backtrack(nums,newboolean[nums.length],newArrayList<>(),result);returnresult;}privatevoidbacktrack(int[]nums,boolean[]used,List<Integer>path,List<List<Integer>>result){if(path.size()==nums.length){result.add(newArrayList<>(path));return;}for(inti=0;i<nums.length;i++){if(used[i])continue;used[i]=true;path.add(nums[i]);backtrack(nums,used,path,result);path.remove(path.size()-1);used[i]=false;}}

二、组合

publicList<List<Integer>>combine(intn,intk){List<List<Integer>>result=newArrayList<>();backtrack(n,k,1,newArrayList<>(),result);returnresult;}privatevoidbacktrack(intn,intk,intstart,List<Integer>path,List<List<Integer>>result){if(path.size()==k){result.add(newArrayList<>(path));return;}for(inti=start;i<=n;i++){path.add(i);backtrack(n,k,i+1,path,result);path.remove(path.size()-1);}}

三、子集

publicList<List<Integer>>subsets(int[]nums){List<List<Integer>>result=newArrayList<>();backtrack(nums,0,newArrayList<>(),result);returnresult;}privatevoidbacktrack(int[]nums,intstart,List<Integer>path,List<List<Integer>>result){result.add(newArrayList<>(path));for(inti=start;i<nums.length;i++){path.add(nums[i]);backtrack(nums,i+1,path,result);path.remove(path.size()-1);}}

💡 觉得有用的话,点赞 + 关注【张老师技术栈】吧!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/27 21:51:52

DDrawCompat终极指南:三步让老游戏在Windows 10/11完美运行

DDrawCompat终极指南&#xff1a;三步让老游戏在Windows 10/11完美运行 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/D…

作者头像 李华
网站建设 2026/7/27 21:50:05

从零实现MD5算法:C++文件完整性校验实战与原理剖析

1. 项目概述&#xff1a;为什么我们需要自己动手实现MD5校验&#xff1f; 在软件分发、数据备份或者日常文件传输的过程中&#xff0c;你肯定遇到过这样的场景&#xff1a;从网上下载了一个几GB的安装包&#xff0c;或者同事发来一个重要的项目源码压缩包&#xff0c;你怎么能百…

作者头像 李华
网站建设 2026/7/27 21:44:41

5分钟快速上手PUBG-Logitech:免费开源罗技鼠标宏压枪工具完整指南

5分钟快速上手PUBG-Logitech&#xff1a;免费开源罗技鼠标宏压枪工具完整指南 【免费下载链接】PUBG-Logitech PUBG罗技鼠标宏自动识别压枪 项目地址: https://gitcode.com/gh_mirrors/pu/PUBG-Logitech PUBG-Logitech是一款基于罗技鼠标宏的开源自动压枪工具&#xff0…

作者头像 李华
网站建设 2026/7/27 21:42:27

ZIP文件结构深度解析:从伪加密到真解密的完整避坑指南

1. 项目概述&#xff1a;为什么我们需要拆解ZIP文件&#xff1f;如果你经常和文件打交道&#xff0c;无论是从网上下载资源包、备份工作文档&#xff0c;还是处理一些“来路不明”的数据包&#xff0c;ZIP格式几乎无处不在。它像一个数字世界的万能收纳袋&#xff0c;把一堆杂乱…

作者头像 李华
网站建设 2026/7/27 21:42:24

如何用grunt-contrib-jshint构建自动化代码检查流程?完整教程

如何用grunt-contrib-jshint构建自动化代码检查流程&#xff1f;完整教程 【免费下载链接】grunt-contrib-jshint Validate files with JSHint. 项目地址: https://gitcode.com/gh_mirrors/gr/grunt-contrib-jshint grunt-contrib-jshint是一款强大的Grunt插件&#xff…

作者头像 李华