统计各位数字之和为偶数的整数个数
统计各位数字之和为偶数的整数个数
给你一个正整数 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) ...
拆分数位后四位数字的最小和
拆分数位后四位数字的最小和
给你一个四位 正 整数 num 。请你使用 num 中的 数位 ,将 num 拆成两个新的整数 new1 和 new2 。new1 和 new2 中可以有 前导 0 ,且 num 中 所有 数位都必须使用。比方说,给你 num = 2932 ,你拥有的数位包括:两个 2 ,一个 9 和一个 3 。一些可能的 [new1, new2] 数对为 [22, 93],[23, 92],[223, 9] 和 [2, 329] 。请你返回可以得到的 new1 和 new2 的 最小 和。
输入:num = 2932
输出:52解释:可行的 [new1, new2] 数对为 [29, 23] ,[223, 9] 等等。最小和为数对 [29, 23] 的和:29 + 23 = 52 。
12345678var minimumSum = function(num) { let arr = (num + '').split('').map(Number) arr.sort((a, b) => a - b) ...
跳水板
跳水板
你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为 shorter,长度较长的木板长度为 longer。你必须正好使用 k 块木板。编写一个方法,生成跳水板所有可能的长度。返回的长度需要从小到大排列。
输入:shorter = 1longer = 2k = 3
输出: [3,4,5,6]解释:可以使用 3 次 shorter,得到结果 3;使用 2 次 shorter 和 1 次 longer,得到结果 4 。以此类推,得到最终结果。
123456789var divingBoard = function(shorter, longer, k) { if (k == 0) return []; if (shorter == longer) return [k * shorter]; const res = []; for (let i = 0; i <= k; i++) { res.push(i * longer + (k - i) * shorter); // 题目好像从短到长排列,那就从0个longer开始 ...
硬币
硬币
硬币。给定数量不限的硬币,币值为 25 分、10 分、5 分和 1 分,编写代码计算 n 分有几种表示法。(结果可能会很大,你需要将结果模上 1000000007)
输入: n = 5
输出:2解释: 有两种方式可以凑成总金额:5=55=1+1+1+1+1
输入: n = 10
输出:4解释: 有四种方式可以凑成总金额:10=1010=5+510=5+1+1+1+1+110=1+1+1+1+1+1+1+1+1+1
12345678910var waysToChange = function(n) { let mod = 1e9+7 let res = 0 for(let i=0; i<= ~~(n/25);i++){ let a = ~~((n-i*25)/10) let t = (a+1)*(~~(n/5)-5*i-a+1) res = (res+t)%mod } return res};