![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣攻克200题
小小布丁--pudding
一只爬行的小乌龟~~
展开
-
【攻克力扣200题--51】131. 分割回文串
稍难~~var partition = function(s) { let res=[]; backtracking(s,[]); return res; function backtracking(str,temp){ if(str.length==0) res.push([...temp]); else{ ...原创 2019-11-05 13:45:46 · 85 阅读 · 0 评论 -
【攻克力扣200题--50】90. 子集 II
自己写滴,嘻嘻~妈妈再也不用担心我的回溯了,QAQ~~var subsetsWithDup = function(nums) { nums.sort((a,b)=>a-b); let res=[]; backtracking(0,[]); return res; function backtracking(start,temp){ ...原创 2019-11-05 11:24:16 · 111 阅读 · 0 评论 -
【攻克力扣200题--49】78. 子集
自己写滴,嘻嘻~~var subsets = function(nums) { let res=[]; backtracking(0,[],nums,res); return res;};function backtracking(start,temp,nums,res){ res.push([...temp]); for(var i=star...原创 2019-11-05 11:13:21 · 131 阅读 · 0 评论 -
【攻克力扣200题--48】216. 组合总和 III
自己写出来滴,有进步,嘻嘻~var combinationSum3 = function(k, n) { let res=[]; backtracking(1,[],n); return res; function backtracking(start,temp,target){ if(target==0&&temp.lengt...原创 2019-11-05 11:04:46 · 124 阅读 · 0 评论 -
【攻克力扣200题--47】40. 组合总和 II
var combinationSum2 = function(candidates, target) { candidates.sort((a,b)=>a-b); let n=candidates.length; let res=[]; backtracking(0,[],target); return res; function backt...原创 2019-11-04 20:45:25 · 187 阅读 · 0 评论 -
【攻克力扣200题--46】39. 组合总和
var combinationSum = function(candidates, target) { var res=[]; backtracking(0,[],target); return res; function backtracking(start,temp,target){ //这个start存在的意义重大,保证结果中不会有重复数组。 ...原创 2019-11-04 20:09:47 · 120 阅读 · 0 评论 -
【攻克力扣200题--45】77. 组合
var combine = function(n, k) { let res=[]; backtracking(1,[]); return res; function backtracking(start,temp){ if(temp.length==k) res.push([...temp]); for(var i=start;i...原创 2019-11-04 19:54:03 · 121 阅读 · 0 评论 -
【攻克力扣200题--44】47. 全排列 II
这种输入数组有重复元素的情况,就需要给一个visited的boolean数组了。var permuteUnique = function(nums) { nums.sort((a,b)=>a-b); let n=nums.length; let res=[]; let visited=[...Array(n)].map(_=>false); ...原创 2019-11-04 19:41:17 · 112 阅读 · 0 评论 -
【攻克力扣200题--43】46. 全排列
var permute = function(nums) { let res=[]; backtracking([],res,nums); return res;};function backtracking(temp,res,nums){ if(temp.length==nums.length) res.push([...temp]); //[...tem...原创 2019-11-04 19:03:00 · 85 阅读 · 0 评论 -
【攻克力扣200题--42】257. 二叉树的所有路径
Backtrackingvar binaryTreePaths = function(root) { var res=[]; backtracking([],root); return res; function backtracking(temp,node){ if(node==null) return; temp.push(node.v...原创 2019-11-03 21:04:04 · 102 阅读 · 0 评论 -
【攻克力扣200题--41】79. 单词搜索
回溯。(回溯跟深广度搜索非常类似)1.回溯一般是需要具体答案时使用,且有修改还原某些值;2.DFS,BFS一般用于只需要一个yes or no的回答时。var exist = function(board, word) { if(word.length==0) return true; if(board.length==0||board[0].length==0) r...原创 2019-11-03 20:14:55 · 111 阅读 · 0 评论 -
【攻克力扣200题--40】93. 复原IP地址
细节超级多,多多注意。可以是0.0.4.6;但不可以是01.01.03.09.。。var restoreIpAddresses = function(s) { var res=[]; helper("",s,res,0); return res;};function helper(temp,s,res,k){ if(k==4||s.length==0)...原创 2019-11-03 19:30:16 · 378 阅读 · 0 评论 -
【攻克力扣200题--39】17. 电话号码的字母组合
一开始忘记了加else,调试了好久都木有找出问题,呜呜呜呜呜呜呜呜呜呜呜,细心啊啊啊啊~var letterCombinations = function(digits) { const dict={'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'};//用的对象,不是M...原创 2019-11-02 19:52:33 · 147 阅读 · 0 评论 -
【攻克力扣200题--37】130. 被围绕的区域
被围绕的区间不会存在于边界上,换句话说,任何边界上的'O'都不会被填充为'X'。 任何不在边界上,或不与边界上的'O'相连的'O'最终都会被填充为'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。DFSvar solve = function(board) { let m=board.length; if(m==0) return ; ...原创 2019-11-01 15:15:40 · 165 阅读 · 0 评论 -
【攻克力扣200题--36】547. 朋友圈
DFS万事开头难,哈哈,现在好爱DFS,通俗易懂~~var findCircleNum = function(M) { let n=M.length; if(n==0) return 0; let circle=0; let visited=[...Array(n)].map(_=>false); for(var i=0;i<n;i++...原创 2019-11-01 13:12:25 · 348 阅读 · 0 评论 -
【攻克力扣200题--35】200. 岛屿数量
DFSvar numIslands = function(grid) { let m=grid.length; if(m==0) return 0; let n=grid[0].length; let direction=[[-1,0],[0,-1],[1,0],[0,1]]; let count=0; for(var i=0;i<m;i...原创 2019-11-01 12:54:27 · 820 阅读 · 1 评论 -
【攻克力扣200题--34】695. 岛屿的最大面积
DFS在程序实现 DFS 时需要考虑以下问题:栈:用栈来保存当前节点信息,当遍历新节点返回时能够继续遍历当前节点。可以使用递归栈。标记:和 BFS 一样同样需要对已经遍历过的节点进行标记。var maxAreaOfIsland = function(grid) { let m=grid.length; if(m==0) return 0; let n=grid...原创 2019-11-01 12:44:55 · 134 阅读 · 0 评论 -
【攻克力扣200题--33】127. 单词接龙
BFSvar ladderLength = function(beginWord, endWord, wordList) { let dict=new Set(wordList); if(!dict.has(endWord)) return 0; queue=[]; queue.push(beginWord); let len=beginWord.le...原创 2019-11-01 10:12:29 · 172 阅读 · 0 评论 -
【攻克力扣200题--32】1091. 二进制矩阵中的最短路径
BFS,在宝宝的帮助下,顺利地写出了这题,开心var shortestPathBinaryMatrix = function(grid) { if(grid[0][0]==1) return -1; let direction=[[1,1],[1,0],[1,-1],[0,1],[0,-1],[-1,1],[-1,0],[-1,-1]]; let queue=[];...原创 2019-10-31 21:51:04 · 200 阅读 · 0 评论 -
【攻克力扣200题--31】279. 完全平方数
dp,动态方程:dp[i]=Math.min(dp[i],dp[i-j*j]+1);var numSquares = function(n) { const dp=[...Array(n+1)].map(_=>0); for(let i=1;i<=n;i++){ dp[i]=i;//最坏的情况就是由若干个1构成; for(let j...原创 2019-10-31 18:11:50 · 96 阅读 · 0 评论 -
【攻克力扣200题--30】95. 不同的二叉搜索树 II
分治思想;出发点是谁是根节点,从1到n都可能是root;然后这个root的左子树有若干种可能,右子树又有若干种可能;把左右子树组合一个遍。一定要注意二叉树这块儿node.left要理解为左子树,node.right要理解为右子树,这样做题理解会更顺畅~var generateTrees = function(n) { if(n==0) return []; return ge...原创 2019-10-30 22:06:57 · 100 阅读 · 0 评论 -
【攻克力扣200题--29】241. 为运算表达式设计优先级
分治算法var diffWaysToCompute = function(input) { let ways=[]; for(var i=1;i<input.length;i++){ var c=input.charAt(i); if(c=='+'||c=='-'||c=='*'){ var left=diffWa...原创 2019-10-30 20:04:03 · 164 阅读 · 0 评论 -
【攻克力扣200题--28】34. 在排序数组中查找元素的第一个和最后一个位置
关于二分,一定要看这篇文章,写得真的很好~~~尤其是对寻找目标数最左边的索引问题的形象解释,很棒棒~~https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/er-fen-cha-zhao-suan-fa-xi-jie-xiang-jie-by-labul...原创 2019-10-30 19:38:55 · 95 阅读 · 0 评论 -
【攻克力扣200题--27】153. 寻找旋转排序数组中的最小值
二分~关于二分,做了一个小总结:1.加不加“=”的问题:看while循环里面l,h是否都变化(即是否都会缩进);都变化则需要l<=h;最后跳出循环的条件是l>h;返回那个看具体题目要求。2.返回l还是h的问题:看while里的条件,若条件是l<h,则代表跳出循环的条件是l=h,故返回哪个都行; ...原创 2019-10-29 21:58:44 · 78 阅读 · 0 评论 -
【攻克力扣200题--26】278. 第一个错误的版本
二分~var solution = function(isBadVersion) { return function(n) { let l=1,h=n; while(l<h){ var m=Math.floor(l+(h-l)/2); if(isBadVersion(m)) h=m; ...原创 2019-10-29 21:38:37 · 128 阅读 · 0 评论 -
【攻克力扣200题--25】540. 有序数组中的单一元素
二分万岁var singleNonDuplicate = function(nums) { let l=0,h=nums.length-1; //l,h均为偶数~ while(l<h){ var m=l+Math.floor((h-l)/2); if(m%2==1) m=m-1; if(nums[m]==nums[m+1]...原创 2019-10-29 21:16:46 · 108 阅读 · 0 评论 -
【攻克力扣200题--24】744. 寻找比目标字母大的最小字母
二分的前提是有序;倘若以后遇到非有序的数组但也想二分,在这之前请排序。var nextGreatestLetter = function(letters, target) { let l=0,h=letters.length-1; while(l<=h){ var m=Math.floor(l+(h-l)/2); if(letters[m...原创 2019-10-28 15:43:47 · 87 阅读 · 0 评论 -
【攻克力扣200题--23】69. x 的平方根
二分,千注意万注意啊,JS里做除法,算出是浮点数结果就是浮点数~~在循环条件为 l <= h 并且循环退出时,h 总是比 l 小1,也就是说 h = 2,l = 3,因此最后的返回值应该为 h 而不是 l。var mySqrt = function(x) { if(x==0) return 0; if(x<=3) return 1; let l=1,h...原创 2019-10-28 14:58:27 · 123 阅读 · 0 评论 -
【攻克力扣200题--21】53. 最大子序和
var maxSubArray = function(nums) { if(nums.length==0) return 0; //凡是数组类的,特殊情况永远摆第一~~ var global=nums[0],local=nums[0]; //把索引0处的值赋给各变量的初始值,很巧妙,处理便捷,避免一大堆什么初始值为负无穷的困扰 for(var i=1;i<num...原创 2019-10-27 19:38:40 · 116 阅读 · 0 评论 -
【攻克力扣200题--20】665. 非递减数列
优先考虑令 nums[i - 1] = nums[i];比较特别的情况就是:nums[i] < nums[i - 2],只能修改 nums[i] = nums[i - 1]var checkPossibility = function(nums) {var count=0;for(var i=1;i<nums.length&&count<=1;i++...原创 2019-10-27 19:22:03 · 121 阅读 · 0 评论 -
【攻克力扣200题--19】392. 判断子序列
var isSubsequence = function(s, t) { var index=-1; for(var c of s){ t=t.substr(index+1); index=t.indexOf(c); if(index==-1) return false; } re...原创 2019-10-27 17:33:59 · 158 阅读 · 0 评论 -
【攻克力扣200题--18】605. 种花问题
var canPlaceFlowers = function(flowerbed, n) { var len=flowerbed.length,count=0; for(var i=0;i<len&&count<n;i++){ if(flowerbed[i]==1) continue; var pre=i==0?0:fl...原创 2019-10-26 18:55:08 · 150 阅读 · 0 评论 -
【攻克力扣200题--17】122. 买卖股票的最佳时机 II
贪心算法,只要后面的比前面的大,我就加上这个利润差。var maxProfit = function(prices) { var len=prices.length; if(len<=1) return 0; var sum=0; for(var i=1;i<len;i++){ var gap=prices[i]-prices[i-...原创 2019-10-26 17:54:34 · 100 阅读 · 0 评论 -
【攻克力扣200题--16】121. 买卖股票的最佳时机
贪心算法,两个实时更新的变量var maxProfit = function(prices) { var len=prices.length; var min=prices[0],profit=0; for(var i=1;i<len;i++){ if(prices[i]<min) min=prices[i]; else p...原创 2019-10-26 17:43:26 · 102 阅读 · 0 评论 -
【攻克力扣200题--15】406. 根据身高重建队列
var reconstructQueue = function(people) { people.sort((a,b)=>(a[0]==b[0]?a[1]-b[1]:b[0]-a[0])); var res=[]; for(var i=0;i<people.length;i++) res.splice(people[i][1],0,people[i]);...原创 2019-10-25 19:53:22 · 127 阅读 · 0 评论 -
【攻克力扣200题--14】452. 用最少数量的箭引爆气球
跟上一题,无重叠区间特别像。我更愿意叫这题穿糖葫芦问题,哈哈,注意擦边的那种也算一个区间,如[3,6]和[6,9]隶属同一串糖葫芦。var findMinArrowShots = function(points) { if(points.length==0) return 0; points.sort((a,b)=>a[1]-b[1]); var end=poi...原创 2019-10-25 17:13:56 · 143 阅读 · 0 评论 -
【攻克力扣200题--13】435. 无重叠区间
贪心思想,先将数组按尾巴大小排序,再依次判断后面的头跟“前面”的尾巴的大小关系,用总数减去顺利数,即得到cut数。var eraseOverlapIntervals = function(intervals) { if(intervals.length==0) return 0; intervals.sort((a,b)=>a[1]-b[1]); var end...原创 2019-10-25 16:51:29 · 180 阅读 · 0 评论 -
【攻克力扣200题--12】455. 分发饼干
贪心算法,先排序,优先满足欲望小的孩子~~~这两天真的是深刻意识到,我家的JS虽然好用,但在有的方面就是比较"傲娇",比如数字数组排序就不可以直接array.sort();而是array.sort((a,b)=>a-b).再比如增强for循环是字符串跟Object专属,数组不可以。给我的综合感觉就像是JS偏心,更偏爱String,对Array就不太友好。而这一点恰恰跟之前学的Py...原创 2019-10-24 16:23:22 · 127 阅读 · 0 评论 -
【攻克力扣200题--11】75. 颜色分类
哎,心好累~~自己写的计数再添加,怎么看怎么对,可就是不对,最后原来是因为用了2遍遍历不符合题目要求,题目要求只可以遍历一次~~var sortColors = function(nums) {var p1=0,p2=nums.length-1,current=0; while(current<=p2){ if(nums[current]==0){ ...原创 2019-10-24 16:02:49 · 78 阅读 · 0 评论 -
【攻克力扣200题--10】451. 根据字符出现频率排序
使用JS ES6的Map(),涉及到了里面的好多方法,全当补习啦·~~~var frequencySort = function(s) { const map=new Map(); for(let ch of s){ if(!map.get(ch)) map.set(ch,1); else map.set(ch,map.get(ch)+1);...原创 2019-10-24 14:30:07 · 128 阅读 · 0 评论