零题&介绍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
