反转每对括号间的子串
反转每对括号间的子串
判定字符是否唯一
输入:s = “(abcd)”
输出:”dcba”
输入:s = “(u(love)i)”
输出:”iloveu”解释:先反转子字符串 “love” ,然后反转整个字符串。
12345678910111213141516171819202122232425var reverseParentheses = function(s) { s = s.split('') let stack = []//把索引存储起来 for (let i = 0; i < s.length; i++) { if (s[i] == '(') { stack.push(i) } if (s[i] == ')') { let pre = stack.pop() myReverse(pre + 1, i - 1) ...
判断通过操作能否让字符串相等 II
判断通过操作能否让字符串相等 II
给你两个字符串 s1 和 s2 ,两个字符串长度都为 n ,且只包含 小写 英文字母。你可以对两个字符串中的 任意一个 执行以下操作 任意 次:选择两个下标 i 和 j ,满足 i < j 且 j - i 是 偶数,然后 交换 这个字符串中两个下标对应的字符。如果你可以让字符串 s1 和 s2 相等,那么返回 true ,否则返回 false 。
输入:s1 = “abcdba”, s2 = “cabdab”
输出:true解释:我们可以对 s1 执行以下操作:
选择下标 i = 0 ,j = 2 ,得到字符串 s1 = “cbadba” 。
选择下标 i = 2 ,j = 4 ,得到字符串 s1 = “cbbdaa” 。
选择下标 i = 1 ,j = 5 ,得到字符串 s1 = “cabdab” = s2 。
123456789101112131415161718192021222324252627282930313233var checkStrings = function(s1, s2) { // 0 2, 0 4 ...
既不是最小值也不是最大值
既不是最小值也不是最大值
给你一个整数数组 nums ,数组由 不同正整数 组成,请你找出并返回数组中 任一 既不是 最小值 也不是 最大值 的数字,如果不存在这样的数字,返回 -1 。返回所选整数。
输入:nums = [3,2,1,4]
输出:2解释:在这个示例中,最小值是 1 ,最大值是 4 。因此,2 或 3 都是有效答案。
输入:nums = [1,2]
输出:-1解释:由于不存在既不是最大值也不是最小值的数字,我们无法选出满足题目给定条件的数字。因此,不存在答案,返回 -1 。
1234567var findNonMinOrMax = function(nums) { if (nums.length <= 2) return -1; nums = [...new Set(nums)]; if (nums.length <= 2) return -1; nums.sort((a, b) => a - b); return nums[1];};
统计各位数字之和为偶数的整数个数
统计各位数字之和为偶数的整数个数
给你一个正整数 num ,请你统计并返回 小于或等于 num 且各位数字之和为 偶数 的正整数的数目。正整数的 各位数字之和 是其所有位上的对应数字相加的结果。
输入:num = 4
输出:2解释:只有 2 和 4 满足小于等于 4 且各位数字之和为偶数。
12345678910111213141516var countEven = function(num) { let count = 0 for(let i=1;i<=num;i++){ let char = String(i), temp = 0, j = 0 while(j < char.length) { temp += Number(char.charAt(j)) j++ } if(temp % 2 === 0) count++ } return count};
仅含 1 的子串数
仅含 1 的子串数
给你一个二进制字符串 s(仅由 ‘0’ 和 ‘1’ 组成的字符串)。返回所有字符都为 1 的子字符串的数目。由于答案可能很大,请你将它对 10^9 + 7 取模后返回。
输入:s = “0110111”
输出:9
解释:共有 9 个子字符串仅由 ‘1’ 组成“1” -> 5 次“11” -> 3 次“111” -> 1 次
1234567891011var numSub = function(s) { const pieces = s.match(/1+/g); let ans = 0; if (pieces) { pieces.forEach((s) => { n = s.length; return (ans += (n * (n + 1)) / 2); }); } return ans % (1e9 + 7);};
最简分数
最简分数
给你一个整数 n ,请你返回所有 0 到 1 之间(不包括 0 和 1)满足分母小于等于 n 的 最简 分数 。分数可以以 任意 顺序返回。
输入:n = 2
输出:[“1/2”]解释:”1/2” 是唯一一个分母小于等于 2 的最简分数。
输入:n = 3
输出:[“1/2”,”1/3”,”2/3”]
12345678910var simplifiedFractions = function(n) { const map = new Map(); for (let i = 1; i < n; i++) { for (let j = i + 1; j <= n; j++) { if (!map.has(i / j)) map.set(i / j, `${i}/${j}`); } } return [...map.values()];};
找到和为给定整数的三个连续整数
找到和为给定整数的三个连续整数
给你一个整数 num ,请你返回三个连续的整数,它们的 和 为 num 。如果 num 无法被表示成三个连续整数的和,请你返回一个 空 数组。
输入:num = 33
输出:[10,11,12]解释:33 可以表示为 10 + 11 + 12 = 33 。10, 11, 12 是 3 个连续整数,所以返回 [10, 11, 12] 。
1234var sumOfThree = function(num) { if (num % 3) return []; return [num / 3 - 1, num / 3, num / 3 + 1];};
交替数字和
交替数字和
给你一个正整数 n 。n 中的每一位数字都会按下述规则分配一个符号:最高有效位 上的数字分配到 正 号。剩余每位上数字的符号都与其相邻数字相反。返回所有数字及其对应符号的和。
输入:n = 521
输出:4解释:(+5) + (-2) + (+1) = 4
输入:n = 111
输出:1解释:(+1) + (-1) + (+1) = 1
123456789101112var alternateDigitSum = function(n) { let sum=0; let arr=`${n}` for(var i=0;i<arr.length;i++){ if(i%2==0){ sum+=Number(arr[i]) }else{ sum-=Number(arr[i]) } } return sum};
拿硬币
拿硬币
桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。
输入:[4,2,1]
输出:4解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。
输入:[2,3,10]
输出:8
123var minCount = function(coins) { return coins.map((ele) => Math.ceil(ele/2)).reduce((pre, cur) => pre + cur);};
报数
报数
实现一个十进制数字报数程序,请按照数字从小到大的顺序返回一个整数数列,该数列从数字 1 开始,到最大的正整数 n 位数字结束。
输入:n = 2
输出:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99]
123var countNumbers = function(n) { return new Array(Math.pow(10, n) - 1).fill(null).map((val, index) => index + 1) ...