js刷题
Candy_Rainbow_
这个作者很懒,什么都没留下…
展开
-
JS 力扣刷题 125. 验证回文串
var isPalindrome = function(s) { //正则表达式去掉非字母和数字字符 s = s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase() return s.split('').reverse().join('') === s};原创 2022-05-01 15:57:03 · 298 阅读 · 0 评论 -
JS力扣刷题 122. 买卖股票的最佳时机 II
var maxProfit = function(prices) { //当天赚当天抛,永远不亏 let res = 0; for(let i = 1; i < prices.length; i++) if(prices[i] - prices[i - 1] > 0)res += prices[i] - prices[i - 1]; return res;};原创 2022-04-30 19:00:35 · 358 阅读 · 0 评论 -
JS 力扣刷题 121. 买卖股票的最佳时机
var maxProfit = function(prices) { //保留之前最小值 let min = Infinity; //算当前值与最小值的差值 let res = 0; for(let i = 0; i < prices.length; i++){ if(min > prices[i])min = prices[i]; if(res < prices[i] - min)res = prices[i] -.原创 2022-04-30 18:39:02 · 331 阅读 · 0 评论 -
JS 力扣刷题 120. 三角形最小路径和
var minimumTotal = function(triangle) { //动态规划 let answers = []; answers.push(triangle[0]); for(let i = 1; i < triangle.length; i++){ let answer = new Array(triangle[i].length); answer[0] = answers[i - 1][0] + triangle[i.原创 2022-04-29 12:54:49 · 129 阅读 · 0 评论 -
JS 力扣刷题 118. 杨辉三角
var generate = function(numRows) { let res = []; if(numRows === 0)return res; res.push([1]); if(numRows === 1)return res; res.push([1,1]); if(numRows === 2)return res; for(let i = 3; i <= numRows; i++){ let answer = .原创 2022-04-29 12:54:02 · 118 阅读 · 0 评论 -
JS 力扣刷题 116. 填充每个节点的下一个右侧节点指针
var connect = function(root) { //总体采用层次遍历 if(!root)return root; let q = []; q.push(root); while(q.length){ let len = q.length; //添加这一步,对每行依次遍历,修改next值 for(let i = 1; i < len; i++) q[i - 1].next = .原创 2022-04-28 10:32:35 · 117 阅读 · 0 评论 -
JS 力扣刷题 114. 二叉树展开为链表
var flatten = function(root) { //建立先序节点连表 const nodelist = []; function dg(t){ if(!t)return; nodelist.push(t); dg(t.left); dg(t.right); } dg(root); //对连表遍历,操作 for(let i = 1; i < node.原创 2022-04-28 10:05:50 · 535 阅读 · 0 评论 -
JS 力扣刷题112. 路径总和
var hasPathSum = function(root, targetSum) { if(!root)return false; if(!root.left && !root.right && root.val == targetSum)return true; return hasPathSum(root.left, targetSum - root.val) || hasPathSum(root.right, targetSum - roo.原创 2022-04-27 15:44:44 · 226 阅读 · 0 评论 -
JS 力扣刷题 113. 路径总和 II
var pathSum = function(root, targetSum) { let answers = []; let answer = []; const backtrack = (t, n) => {//回溯 if(!t)return; //走到空节点时添加答案,但是叶子节点左右节点都为空,所以有重复解,想办法去重 if(!t.left && !t.right && n == t.va.原创 2022-04-27 13:56:11 · 115 阅读 · 0 评论 -
JS 力扣刷题 111. 二叉树的最小深度
var minDepth = function(root) { if(!root)return 0;//root为null let q = [];//队列层次遍历 q.push(root); let deep = 1;//记录当前深度 while(q.length){ let len = q.length;//队列长度会变 for(let i = 0; i < len; i++){ let tmp = q.原创 2022-04-27 10:39:32 · 678 阅读 · 0 评论 -
JS力扣刷题 110. 平衡二叉树
var isBalanced = function(root) { function deep(root){//求深度 if(!root)return 0; return Math.max(deep(root.left), deep(root.right)) + 1; } function dg(root){//递归 if(!root)return true; return Math.abs(deep(root.lef.原创 2022-04-27 09:55:50 · 621 阅读 · 0 评论 -
JS 力扣刷题 109. 有序链表转换二叉搜索树
思路: 参考上一条,先将链表变成数组。var sortedListToBST = function(head) { const nums = []; while(head){ nums.push(head.val); head = head.next; } const dg = (nums) => { if(!nums.length)return null; let mid = (num...原创 2022-04-26 16:35:07 · 369 阅读 · 0 评论 -
JS力扣刷题 108. 将有序数组转换为二叉搜索树
思路:var sortedArrayToBST = function(nums) { const dg = (nums) =>{ if(!nums.length)return null; let mid = (nums.length - 1) >> 1; let root = new TreeNode(nums[mid]); root.left = dg(nums.slice(0, mid));原创 2022-04-26 16:12:01 · 342 阅读 · 0 评论 -
JS 力扣刷题 106. 从中序与后序遍历序列构造二叉树
var buildTree = function(inorder, postorder){ if(!inorder.length)return null; let root = new TreeNode(postorder[postorder.length - 1]); let m = inorder.findIndex(item => item === postorder[postorder.length - 1]); root.left = buildTree(i.原创 2022-04-26 16:10:10 · 151 阅读 · 0 评论 -
JS 力扣刷题 107. 二叉树的层序遍历 II
var levelOrderBottom = function(root) { if(!root)return [];//特殊情况 const q = [[root, 0]];//层次遍历,记录每个节点和所在的层数 const res = []; while(q.length){//队列层次遍历 [node, index] = q.shift();//出队 if(!res[index]){//该层第一个节点 res.p.原创 2022-04-25 12:42:11 · 368 阅读 · 0 评论 -
JS 力扣刷题 105. 从前序与中序遍历序列构造二叉树
var buildTree = function(preorder, inorder) { let l1 = 0, l2 = 0, r1 = preorder.length - 1, r2 = inorder.length - 1; const dg = (l1, l2, r1, r2) => { if(l1 > r1)return null;//没有根节点 let root = new TreeNode(preorder[l1]); .原创 2022-04-24 22:13:34 · 297 阅读 · 0 评论 -
JS 力扣刷题 103. 二叉树的锯齿形层序遍历
var zigzagLevelOrder = function(root) { let rear = [];//遍历的队列 let answers = [];//二维数组 if(!root)return answers;//特殊情况 rear.push(root);//根节点入队 let flagStack = 1;//单层从左往右(队列)双层从右往左(栈) while(rear.length > 0){ let answer = [].原创 2022-04-23 12:10:33 · 1950 阅读 · 0 评论 -
JS 力扣刷题 102. 二叉树的层序遍历
var levelOrder = function(root) { let rear = [];//遍历的队列 let answers = [];//二维数组 if(!root)return answers;//特殊情况 rear.push(root);//根节点入队 while(rear.length > 0){ let answer = [];//一层一层遍历 let len = rear.length;//队列长度会变,记.原创 2022-04-22 18:20:24 · 1448 阅读 · 0 评论 -
力扣刷题 101. 对称二叉树
var isSymmetric = function(root) { const isTrue = (left, right) => {//左右子树是不是镜像 if(left == null && right == null)return true;//走到了根节点 if(left == null || right == null)return false;//左右子树有一个不空 if(left.val != right.val.原创 2022-04-22 17:17:25 · 402 阅读 · 0 评论 -
JS力扣刷题 100. 相同的树
var isSameTree = function(p, q) { let flag = true; const compare = (p, q) => { if(p == null && q == null)return;//p q都为空时返回 if(p == null || q == null){//只有一个为空 false flag = false; return; .原创 2022-04-19 19:15:50 · 149 阅读 · 0 评论 -
JS力扣刷题 99. 恢复二叉搜索树
思路: 二叉排序树中序遍历一定是有序的var recoverTree = function(root) { //中序遍历放到数组中 const arr = []; const bulidarr = (t) => { if(t == null)return; bulidarr(t.left); arr.push(t.val); bulidarr(t.right); } buli...原创 2022-04-19 18:54:29 · 754 阅读 · 0 评论 -
JS力扣刷题 98. 验证二叉搜索树
var isValidBST = function(root) { //中序遍历排序二叉树必是有序的 let flag = true; let pre = -Infinity; const isBst = t =>{ if(t == null)return; isBst(t.left); if(t.val <= pre)flag = false; pre = t.val; isBst.原创 2022-04-19 13:29:35 · 758 阅读 · 0 评论 -
JS力扣刷题 97. 交错字符串
思路var isInterleave = function(s1, s2, s3) { if(s1.length + s2.length != s3.length)return false; let m = s1.length; let n = s2.length; let res = Array.from(Array(m + 1), () => new Array(n + 1).fill(false)); res[0][0] = true; fo原创 2022-04-18 11:52:11 · 145 阅读 · 0 评论 -
JS力扣刷题 96. 不同的二叉搜索树
思路var numTrees = function(n) { let res = new Array(n + 1); res[0] = 1; res[1] = 1; for(let i = 2; i <= n; i++){ let tmp = 0; for(let j = 0; j < i; j++) tmp += res[j] * res[i - 1 - j]; res[i] = tm原创 2022-04-18 10:39:03 · 91 阅读 · 0 评论 -
JS力扣刷题 94. 二叉树的中序遍历
var inorderTraversal = function(root) { let res = []; function inorderVisit(t){ if(t){ inorderVisit(t.left); res.push([t.val]); inorderVisit(t.right); } } inorderVisit(root); return r.原创 2022-04-17 23:17:59 · 372 阅读 · 0 评论 -
JS力扣刷题 93. 复原 IP 地址
var restoreIpAddresses = function(s) { let answers = []; let answer = []; function backtrack(index, start){ if(index == 4)//走到最后一层 if(start == s.length){//走到了最后一个字符 answers.push(answer.join('.')); .原创 2022-04-17 22:08:08 · 413 阅读 · 0 评论 -
JS 力扣刷题 91. 解码方法
思路原创 2022-04-17 18:12:15 · 222 阅读 · 0 评论 -
JS力扣刷题 92. 反转链表 II
var reverseBetween = function(head, left, right) { let pre = new ListNode(0, head); head = pre; //找到left的前一个 for (let i = 0; i < left - 1; ++i) { pre = pre.next; } let p = pre.next; //在p之前不断的头插法 for(let i = 0; i .原创 2022-04-17 15:18:33 · 544 阅读 · 0 评论 -
JS力扣刷题 90. 子集 II
var subsetsWithDup = function(nums) { //先排序 nums = nums.sort(function(a, b){ return a - b; }); let used = new Array(nums.length).fill(0); let answers = []; let answer = []; function backtrack(index, start){ if(i.原创 2022-04-17 11:00:50 · 143 阅读 · 0 评论 -
JS力扣刷题 89. 格雷编码
思路:var grayCode = function(n) { //初始化 n = 0 时 let res = [0]; for(let i = 1; i <= n; i++){ let len = res.length; //上半部分不要动,动下半部分 for(let j = len - 1; j >= 0; j--){ res.push(Math.pow(2, i - 1) + res[原创 2022-04-17 00:15:05 · 187 阅读 · 0 评论 -
JS力扣刷题 88. 合并两个有序数组
var merge = function(nums1, m, nums2, n) { let p = m - 1; let q = n - 1; let k = m + n - 1; //从最后一位开始填 while(p >= 0 && q >= 0) if(nums1[p] > nums2[q]) nums1[k--] = nums1[p--]; else .原创 2022-04-16 18:31:57 · 266 阅读 · 0 评论 -
JS力扣刷题86. 分隔链表
var partition = function(head, x) { let f = r = new ListNode(); let p = q = head; //第一次遍历,将小的放进来 while(p){ if(p.val < x){ let insert = new ListNode(p.val); r.next = insert; r = insert; .原创 2022-04-16 18:15:20 · 414 阅读 · 0 评论 -
JS力扣刷题 83. 删除排序链表中的重复元素
var deleteDuplicates = function(head) { let pre = new ListNode(Infinity, null); pre.next = head; let p = head; head = pre; while(p){ if(pre.val == p.val){ p = p.next; pre.next = p; }else{ .原创 2022-04-16 18:14:29 · 102 阅读 · 0 评论 -
JS力扣刷题 82.删除排序链表中的重复元素 II
var deleteDuplicates = function(head) { let pre = new ListNode(); pre.next = head; let p = head; head = pre; //p不空的话 while(p){ //找到相同值的最后一个结点 while(p.next && p.val == p.next.val)p = p.next; if(pre.ne.原创 2022-04-15 14:11:24 · 420 阅读 · 0 评论 -
JS力扣刷题81. 搜索旋转排序数组 II
二分太烦了var search = function(nums, target) { for(let i = 0; i < nums.length; i++)if(target == nums[i])return true; return false;};原创 2022-04-15 13:36:18 · 69 阅读 · 0 评论 -
JS力扣刷题80. 删除有序数组中的重复项 II
思路var removeDuplicates = function(nums) { //特殊情况 if(nums.length <= 2)return nums.length; //先保留前面两位,新数组长度初始为2 let len = 2; //从第三位开始遍历,如果该位置不等于新数组的倒数第二位就把它放进来,新数组长度+1 for(let i = 2; i < nums.length; i++){ if(nums[i] !原创 2022-04-14 16:13:41 · 243 阅读 · 0 评论 -
JS力扣刷题78. 子集
var subsets = function(nums) { let answer = []; let answers = []; function backtrack(index, start){ if(index <= nums.length)answers.push([...answer]); for(let i = start; i <= nums.length - 1; i++){ answer.push.原创 2022-04-14 01:12:14 · 121 阅读 · 0 评论 -
JS力扣刷题77. 组合
var combine = function(n, k) { let answers = []; let answer = []; function backtrack(index, start){ if(index == k)answers.push([...answer]); for(let i = start; i <= n; i++){ answer.push(i); backtrack(.原创 2022-04-14 00:48:51 · 111 阅读 · 0 评论 -
JS力扣刷题75. 颜色分类
var sortColors = function(nums) { //冒泡排序 for(let i = nums.length - 2; i >= 0; i--) for(let j = 0; j <= i; j++) if(nums[j + 1] < nums[j]) [nums[j + 1], nums[j]] = [nums[j], nums[j + 1]]};原创 2022-04-13 11:59:34 · 230 阅读 · 0 评论 -
JS力扣刷题74. 搜索二维矩阵
var searchMatrix = function(matrix, target) { //先判断在哪一行 let i = 0; for(; i < matrix.length - 1; i++) if(matrix[i][0] <= target && matrix[i + 1][0] > target) break; return (new Set(matrix[i])).has(targe.原创 2022-04-13 11:36:09 · 240 阅读 · 0 评论