leetcode
非让我改名字
这个作者很懒,什么都没留下…
展开
-
131. 分割回文串
/** * @param {string} s * @return {string[][]} */var partition = function(s) { let res = [] let path = [] const backTracking = function(s, startIndex){ if(startIndex === s.length){ res.push([...path]) r原创 2022-04-26 17:11:39 · 153 阅读 · 0 评论 -
39. 组合总和
/** * @param {number[]} candidates * @param {number} target * @return {number[][]} */var combinationSum = function(candidates, target) { let arr = candidates.sort((a,b) => a - b) let res = [] let path = [] const backTracking = funct原创 2022-04-25 22:51:45 · 158 阅读 · 0 评论 -
77. 组合
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 :输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]/** * @param {number} n * @param {number} k * @return {number[][]} */ // 回溯var combine = function(n, k) {原创 2022-04-24 19:30:19 · 270 阅读 · 0 评论 -
46. 全排列
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 :输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]回溯算法var permute = function(nums) { let res = [] dfs([]) function dfs(path){ if(path.length === nums.length){原创 2022-03-29 21:47:06 · 236 阅读 · 0 评论 -
124. 二叉树中的最大路径和
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。var maxPathSum = function(root) { let res = Number.MIN_SAFE_INTEGER function dfs(node){ if(!node) {return 0}原创 2022-03-29 19:26:46 · 420 阅读 · 0 评论 -
199. 二叉树的右视图
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例 :输入: [1,2,3,null,5,null,4]输出: [1,3,4]/*** 对于同一层的节点 当 res.length === depth 时存入数组,遍历到其兄弟时这两个就不相等了,所以同一层只会把最右面的放入数组*/var rightSideView = function(root) { let res = [] dfs(root, res, 0)原创 2022-03-28 15:24:58 · 271 阅读 · 0 评论 -
1248. 统计「优美子数组」
给你一个整数数组 nums 和一个整数 k。如果某个连续子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中 「优美子数组」 的数目。示例 :输入:nums = [1,1,2,1,1], k = 3输出:2解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。思路:oddIndexArray: 存放 nums 中所有的奇数的下标,另外将 -1 放入数组第一位,nums.length 放入最后一位。例如 nums=[1,2,2,3,5原创 2022-03-28 11:21:04 · 243 阅读 · 0 评论 -
187. 重复的DNA序列
给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。示例 1:输入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”输出:[“AAAAACCCCC”,“CCCCCAAAAA”]var findRepeatedDnaSequences = function(s) { let times = {} let i = 0 let res = [] whi原创 2022-03-27 18:50:48 · 127 阅读 · 0 评论 -
200. 岛屿数量
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [[“1”,“1”,“1”,“1”,“0”],[“1”,“1”,“0”,“1”,“0”],[“1”,“1”,“0”,“0”,“0”],[“0”,“0”,“0”,“0”,“0”]]输出:1示例 2:输入:grid = [[“1”,“1”,“0”,“0原创 2022-03-27 17:00:31 · 53 阅读 · 0 评论 -
238. 除自身以外数组的乘积
除了自己的所有乘积可以看为自己左边的所有元素乘积与右边的所有元素乘积相乘。创建一个数组记录每一项所有左边元素的乘积。之后再倒序计算每项右边元素的乘积,同时乘上左边的。第二次就不用新开一个数组记录右边的乘积了,用一个变量就行,算一次就直接与left数组相乘拿到最后结果。/** * @param {number[]} nums * @return {number[]} */var productExceptSelf = function(nums) { // 左边 let left = []原创 2021-10-23 14:53:04 · 73 阅读 · 0 评论 -
514. 自由之路
举例:输入: ring = "godding", key = "gd"输出: 4/** * @param {string} ring * @param {string} key * @return {number} */var findRotateSteps = function(ring, key) { // 存储 ring 中每个字母出现的 index /*{g: [0], o: [1], d: [2, 3], ...} */ const indexMap = {}原创 2021-10-23 11:52:56 · 43 阅读 · 0 评论 -
403. 青蛙过河
/** * @param {number[]} stones * @return {boolean} */var canCross = function(stones) { const set = new Set() // 记忆化存储,降低时间复杂度 return h(stones,0,0,set) // 初始在石头0,上一次跳了0步};function h(stones, index, k, set){ const key = index * 1000 + k原创 2021-10-22 19:13:53 · 139 阅读 · 0 评论 -
3. 无重复字符的最长子串
var lengthOfLongestSubstring = function(s) { let set = new Set() let i = 0, j = 0, maxLength = 0 let length = s.length for(i; i<s.length;i++){ if(!set.has(s[i])){ set.add(s[i]) maxLength = Math.max(set.si.原创 2021-10-17 17:26:50 · 35 阅读 · 0 评论 -
2. 两数相加
var addTwoNumbers = function(l1, l2) { let head = new ListNode() let current = head let carry = 0 // 是否进位 while(l1 !== null || l2 !== null){ let sum = 0 if(l1 !== null){ sum += l1.val l1 = l1.next原创 2021-10-17 10:06:59 · 59 阅读 · 0 评论 -
1. 两数之和
最后一条:因为 map.has() 是根据 key 判断的var twoSum = function(nums, target) { const map = new Map() for(let i = 0; i < nums.length; i++){ let complement = target - nums[i] if(map.has(complement)){ return [map.get(complement), .原创 2021-10-16 22:51:42 · 34 阅读 · 0 评论