累加数
累加数
累加数 是一个字符串,组成它的数字可以形成累加序列。一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外,序列中的每个后续数字必须是它之前两个数字之和。给你一个只包含数字 ‘0’-‘9’ 的字符串,编写一个算法来判断给定输入是否是 累加数 。如果是,返回 true ;否则,返回 false 。说明:累加序列里的数,除数字 0 之外,不会 以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。
输入:”112358”
输出:true
解释:累加序列为: 1, 1, 2, 3, 5, 8 。1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8
输入:”199100199”
输出:true
解释:累加序列为: 1, 99, 100, 199。1 + 99 = 100, 99 + 100 = 199
12345678910111213141516171819202122232425262728293031323334353637var isAdditiveNumber = function ...
编辑距离
编辑距离
给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符
输入:word1 = “horse”, word2 = “ros”
输出:3
解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)
输入:word1 = “intention”, word2 = “execution”
输出:5
解释:intention -> inention (删除 ‘t’)inention -> enention (将 ‘i’ 替换为 ‘e’)enention -> exention (将 ‘n’ 替换为 ‘x’)exention -> exection (将 ‘n’ 替换为 ‘c’)exection -> execution (插入 ‘u’)-
12345678910111213141516171819202122 ...
电话号码的字母组合
电话号码的字母组合
给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 NestedInteger 。列表中的每个元素只可能是整数或整数嵌套列表
输入:digits = “23”
输出:[“ad”,”ae”,”af”,”bd”,”be”,”bf”,”cd”,”ce”,”cf”]
输入:digits = “”
输出:[]
123456789101112131415161718192021222324252627282930313233var letterCombinations = function(digits) { let phone = { //电话数字到字母的映射 '2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6 ...
迷你语法分析器
迷你语法分析器
给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 NestedInteger 。列表中的每个元素只可能是整数或整数嵌套列表
输入:s = “324”,
输出:324
解释:你应该返回一个 NestedInteger 对象,其中只包含整数值 324。
输入:s = “[123,[456,[789]]]”,
输出:[123,[456,[789]]]
解释:返回一个 NestedInteger 对象包含一个有两个元素的嵌套列表:
一个 integer 包含值 123
一个包含两个元素的嵌套列表: i. 一个 integer 包含值 456 ii. 一个包含一个元素的嵌套列表 a. 一个 integer 包含值 789
12345678910111213141516171819var deserialize = function(s) { let js = JSON.parse(s) let parse = function (value) { let res = n ...
复数乘法
复数乘法
复数 可以用字符串表示,遵循 “实部+虚部 i” 的形式,并满足下述条件:实部 是一个整数,取值范围是 [-100, 100]虚部 也是一个整数,取值范围是 [-100, 100]i2 == -1给你两个字符串表示的复数 num1 和 num2 ,请你遵循复数表示形式,返回表示它们乘积的字符串。
输入:num1 = “1+1i”, num2 = “1+1i”
输出:”0+2i”
解释:(1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它转换为 0+2i 的形式。
输入:num1 = “1+-1i”, num2 = “1+-1i”
输出:”0+-2i”
解释:(1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i ,你需要将它转换为 0+-2i 的形式。
123456var complexNumberMultiply = function(a, b) { let reg1 = /-?\d+/g, reg2 = /[\+\-]/g; let arr1 = a.match(r ...
前K个高频单词
前 K 个高频单词
给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序 排序。
输入: words = [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2
输出: [“i”, “love”]
解析: “i” 和 “love” 为出现次数最多的两个单词,均为 2 次。注意,按字母顺序 “i” 在 “love” 之前。
输入: [“the”, “day”, “is”, “sunny”, “the”, “the”, “the”, “sunny”, “is”, “is”], k = 4
输出: [“the”, “is”, “sunny”, “day”]
解析: “the”, “is”, “sunny” 和 “day” 是出现次数最多的四个单词,出现次数依次为 4, 3, 2 和 1 次。
123456789101112131415161718var topKFrequent = function(wor ...
移掉 K 位数字
移掉 K 位数字
给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。
输入:num = “1432219”, k = 3
输出:”1219”
解释:移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。
输入:num = “10200”, k = 1
输出:”200”
解释:移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。
12345678910111213141516171819var removeKdigits = function(num, k) { let stack = [] // 遍历数组 for (let c of num) { // 1. 删除的数字不到k个 // 2. 前一位的数字大于当前位 while (k && stack[stack.length - 1] > c) { // 删除前面大的数字 stack.pop() ...
两句话中的不常见单词
两句话中的不常见单词
句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。给你两个 句子 s1 和 s2 ,返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。
输入:s1 = “this apple is sweet”, s2 = “this apple is sour”
输出:[“sweet”,”sour”]
输入:s1 = “apple apple”, s2 = “banana”
输出:[“banana”]
1234567891011121314151617181920212223var uncommonFromSentences = function(s1, s2) { // 首先将s1和s2结合起来 let s = s1.split(' ').concat(s2.split(' ')) // 初始化Map()对象 let map = new Map() // ...
字母异位词分组
字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,”tan”],[“ate”,”eat”,”tea”]]
输入: strs = [“”]
输出: [[“”]]
12345678910111213141516var groupAnagrams = function(strs) { var res = []; var map = new Map(); for(var i=0;i<strs.length;i++){ var k = strs[i].split('').sort().join(''); if(map.has(k)){ map.get(k).push(strs[i]); ...
下一个更大元素 III
下一个更大元素 III
给你一个正整数 n ,请你找出符合条件的最小整数,其由重新排列 n 中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1 。注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1 。
输入:n = 12
输出:21
输入:n = 21
输出:-1
1234567891011121314151617181920 for (let i = str.length - 1; i >= 0; i--) { if (q.length === 0 || str[i] >= q[q.length - 1]) q.push(str[i]) ; else { let count = 0 // 出栈,记录出栈的位数 while (q.length !== 0 && str[i] < q[q.length - 1]) { q.pop() count++ ...