当前位置: 首页 > Web前端 > JavaScript

40.组合总和II-算法(leetode,附思维导图+全解)300题

时间:2023-03-27 16:37:50 JavaScript

零题&介绍1题算法(leetode,附思维导图+全解)300题(40)组合总和II2码农三少介绍,博主专用编写极简但完整的问题解决方案(算法)。专注于一题多解和结构化思维,一起刷LeetCode~一题描述二解概览(思维导图)三全解1方案11)代码://方案1《回溯法(递归版)》//通过:172/175。输入[1,1,...,1,1]会超时!!//提示:“有序胜于无序”。//通过sort方法将一个无序数组变成有序数组是一件非常划算的事情(时间复杂度仅为O(nlogn))。//思路://1)状态初始化//2)调用dfs//3)结果去重//4)返回结果resListvarcombinationSum2=function(candidates,target){constdfs=(curIndex,l,curSum,target,curArr,resList)=>{//1)递归退出if(curSum===target){//注意:使用slice获取其复制值!!resList.push(curArr.slice());返回;}if(curIndex>=l||curSum>target){返回;}//2)递归主体(回溯=选择+不选择)//2.1)选择curArr.push(candidates[curIndex]);curSum+=candidates[curIndex];dfs(curIndex+1,l,curSum,target,curArr,resList);//2.1)未选中(注意:可能需要恢复环境,如下2行代码-pop,-=)curArr.pop();curSum-=candidates[curIndex];dfs(curIndex+1,l,curSum,target,curArr,resList);};//1)状态初始化constl=candidates.长度;候选人=候选人。排序((a,b)=>a-b);让curIndex=0,curSum=0,curArr=[],resList=[];//2)调用dfsdfs(curIndex,l,curSum,target,curArr,resList);//3)去重结果resList=[...newSet(resList.map(item=>item.join('#')))].map(item=>item.split('#'));//4)返回结果resListreturnresList;};2方案21)代码://方案2《回溯法(递归版本-优化)》//思路://1)状态初始化//2)调用dfs//3)返回结果resList//参考://1)https://leetcode-cn.com/problems/combination-sum-ii/solution/man-tan-wo-li-jie-de-hui-su-chang-wen-shou-hua-tu-/constcombinationSum2=(candidates,target)=>{//1)状态初始化constl=candidates.length;candidates=candidates.sort((a,b)=>a-b);const资源列表=[];constdfs=(curIndex,curArr,sum)=>{//start是当前选择范围的索引第一个//1)递归退出if(sum===target){//注意:使用slice,深拷贝!resList.push(curArr.slice());返回;}如果(总和>目标){返回;}//2)递归体//枚举当前的选择(leti=curIndex;i=curIndex&&candidates[i-1]==candidates[i]){继续;}//2.1)选择curArr.push(candidates[i]);dfs(i+1,curArr,sum+candidates[i]);//2.2)CurArr.pop()未被选中;}};//2)调用dfsdfs(0,[],0);//3)返回结果resListreturnresList;};四更1刷题进度1)LeetCode:347/24912)《剑指offer》:66/663)相关学习资料和笔记总结:https://github.com/CYBYOB/algorithm-leetcode/tree/master/data%26notes.4)注:所有题目大概有2-5个解答,以后会不断更新题解。敬请关注~欢迎大家进群学习交流解决问题拿高薪~2GitHub-LeetCode项目仓库0)本项目地址:https://github.com/CYBYOB/algorithm-leetcode.目标与愿景:让大家具备一定的算法能力,在面试中应对算法(能举一反三的同学也能融入自己的肌肉和血液,甚至为公司的业务和技术赋能)。我还是每周更新——保证每周都有新题和新解,刺激你的神经和刷题欲望。欢迎对算法感兴趣的同学加入我们的社区。QQ群:933919972;作者QQ:1520112971;作者VX:c13227839870(可以拉你进群,一起学习交流~)。3作者标签1)《BAT小伪全栈工程师,专注前端,偶尔写点后端》。2)2019微信小程序应用开发大赛-全国三等奖;2019CODA大赛-Top17/211并获得“优秀团队”等称号3)“半自媒体人”,在校期间,个人公众号(IT三少。新自媒体(公众号)编号:马农三少)半年内实现0到5.8K+粉丝增长等。