超级丑数
超级丑数
超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 primes 中。给你一个整数 n 和一个整数数组 primes ,返回第 n 个 超级丑数 。题目数据保证第 n 个 超级丑数 在 32-bit 带符号整数范围内。
输入:n = 12, primes = [2,7,13,19]
输出:32
解释:给定长度为 4 的质数数组 primes = [2,7,13,19],前 12 个超级丑数序列为:[1,2,4,7,8,13,14,16,19,26,28,32] 。
输入:n = 1, primes = [2,3,5]
输出:1
解释:1 不含质因数,因此它的所有质因数都在质数数组 primes = [2,3,5] 中。
1234567891011121314151617181920212223var nthSuperUglyNumber = function(n, primes) { const len = primes.length; let order = [1]; // 第一个丑数是 1 let base = new Arra ...
整数拆分
整数拆分
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。
输入: n = 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。
输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
1234567891011121314var integerBreak = function(n) { const dp = new Array(n + 1); dp[1] = 1; dp[2] = 1; for (let i = 3; i <= n; i++) { dp[i] = 0; // 对于数字 i,它可以分为两份:j 和 i-j,j 的范围是 1 到 i-j for (let j = 1; j <= i - j; j++) { // 对于 i-j 这部分可以拆或不拆,不拆就是 i-j,拆就是 dp[i-j] dp[i] = Mat ...
删除被覆盖区间
删除被覆盖区间
给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。只有当 c <= a 且 b <= d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖。在完成所有删除操作后,请你返回列表中剩余区间的数目。
输入:intervals = [[1,4],[3,6],[2,8]]
输出:2
解释:区间 [3,6] 被区间 [2,8] 覆盖,所以它被删除了。
123456789101112131415161718192021var removeCoveredIntervals = function(intervals) { // [x, y]按照x升序 y降序排列 intervals.sort((a, b) => { if (a[0] == b[0]) { return b[1] - a[1]; } return a[0] - b[0]; }); let i = 0, len = intervals.length, ...
有多少小于当前数字的数字
有多少小于当前数字的数字
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。以数组形式返回答案。
输入:nums = [8,1,2,2,3]
输出:[4,0,1,1,3]
解释:对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。对于 nums[1]=1 不存在比它小的数字。对于 nums[2]=2 存在一个比它小的数字:(1)。对于 nums[3]=2 存在一个比它小的数字:(1)。对于 nums[4]=3 存在三个比它小的数字:(1,2 和 2)。
输入:nums = [6,5,4,8]
输出:[2,1,0,3]
输入:nums = [7,7,7,7]
输出:[0,0,0,0]
1234567891011121314151617var smallerNumbersThanCurrent = function(nums) { //因为知道n ...
阶乘后的零
阶乘后的零
给定一个整数 n ,返回 n! 结果中尾随零的数量。提示 n! = n _ (n - 1) _ (n - 2) _ … _ 3 _ 2 _ 1
输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0
输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0
输入:n = 0
输出:0
12345678910111213var trailingZeroes = function(n) { let count = 0; while(n>0) { // 主要找出2*5的组合,每一个这样的组合就会产生一个0 //,但是阶乘中2出现的次数通常大于或等于5出现的次数, // 比如8可以分解成2*2*2。5隔五个数出现一次 const k = n / 5 | 0; count += k; // 更新n的值 n = k; } return count;};
分割平衡字符串
分割平衡字符串
平衡字符串 中,’L’ 和 ‘R’ 字符的数量是相同的。给你一个平衡字符串 s,请你将它分割成尽可能多的子字符串,并满足:每个子字符串都是平衡字符串。返回可以通过分割得到的平衡字符串的 最大数量 。
输入:s = “RLRRLLRLRL”
输出:4
解释:s 可以分割为 “RL”、”RRLL”、”RL”、”RL” ,每个子字符串中都包含相同数量的 ‘L’ 和 ‘R’ 。
输入:s = “RLRRRLLRLL”
输出:2
解释:s 可以分割为 “RL”、”RRRLLRLL”,每个子字符串中都包含相同数量的 ‘L’ 和 ‘R’ 。注意,s 无法分割为 “RL”、”RR”、”RL”、”LR”、”LL” 因为第 2 个和第 5 个子字符串不是平衡字符串。
输入:s = “LLLLRRRR”
输出:1
解释:s 只能保持原样 “LLLLRRRR” 。
123456789101112131415var balancedStringSplit = function(s) { let index = 0 let count = 0 f ...
一年中的第几天
一年中的第几天
给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。
输入:date = “2019-01-09”
输出:9
解释:给定日期是2019年的第九天。
输入:date = “2019-02-10”
输出:41
12345678var dayOfYear = function(date) { let currentDate = new Date(date); let year = currentDate.getFullYear(); let firstDayOfYear = new Date(year, 0, 1); var diff = Math.floor((currentDate - firstDayOfYear) / (24 * 60 * 60 * 1000)) + 1; return diff;};
IP 地址无效化
IP 地址无效化
给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。所谓无效化 IP 地址,其实就是用 “[.]” 代替了每个 “.”。
输入:address = “1.1.1.1”
输出:”1[.]1[.]1[.]1”
输入:address = “255.100.50.0”
输出:”255[.]100[.]50[.]0”
1234var defangIPaddr = function(address) { var reg = /\./g; return address.replace(reg,"[.]");};
查找和替换模式
查找和替换模式
你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们就得到了所需的单词,那么单词与模式是匹配的。(回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。)返回 words 中与给定模式匹配的单词列表。你可以按任何顺序返回答案。
输入:words = [“abc”,”deq”,”mee”,”aqq”,”dkd”,”ccc”], pattern = “abb”
输出:[“mee”,”aqq”]
解释:“mee” 与模式匹配,因为存在排列 {a -> m, b -> e, …}。“ccc” 与模式不匹配,因为 {a -> c, b -> c, …} 不是排列。因为 a 和 b 映射到同一个字母。-
12345678910111213141516171819202122232425262728293031323334353637var findAndReplacePatte ...
词典中最长的单词
词典中最长的单词
给出一个字符串数组 words 组成的一本英语词典。返回 words 中最长的一个单词,该单词是由 words 词典中其他单词逐步添加一个字母组成。若其中有多个可行的答案,则返回答案中字典序最小的单词。若无答案,则返回空字符串。
输入:words = [“w”,”wo”,”wor”,”worl”, “world”]
输出:”world”
解释: 单词”world”可由”w”, “wo”, “wor”, 和 “worl”逐步添加一个字母组成。
输入:words = [“a”, “banana”, “app”, “appl”, “ap”, “apply”, “apple”]
输出:”apple”
解释:”apply” 和 “apple” 都能由词典中的单词组成。但是 “apple” 的字典序小于 “apply”
12345678910111213141516171819var longestWord = function(words) { let set = new Set() words.forEach(v => set.a ...