找出最大的可达成数字
找出最大的可达成数字
给你两个整数 num 和 t 。如果整数 x 可以在执行下述操作不超过 t 次的情况下变为与 num 相等,则称其为 可达成数字 :每次操作将 x 的值增加或减少 1 ,同时可以选择将 num 的值增加或减少 1 。返回所有可达成数字中的最大值。可以证明至少存在一个可达成数字。
输入:num = 4, t = 1输出:6解释:最大可达成数字是 x = 6 ,执行下述操作可以使其等于 num :
x 减少 1 ,同时 num 增加 1 。此时,x = 5 且 num = 5 。可以证明不存在大于 6 的可达成数字。
输入:num = 3, t = 2输出:7解释:最大的可达成数字是 x = 7 ,执行下述操作可以使其等于 num :
x 减少 1 ,同时 num 增加 1 。此时,x = 6 且 num = 4 。
x 减少 1 ,同时 num 增加 1 。此时,x = 5 且 num = 5 。可以证明不存在大于 7 的可达成数字。
123var theMaximumAchievableX = function(num, t) { ...
判断一个数是否迷人
判断一个数是否迷人
给你一个三位数整数 n 。如果经过以下修改得到的数字 恰好 包含数字 1 到 9 各一次且不包含任何 0 ,那么我们称数字 n 是 迷人的 :将 n 与数字 2 _ n 和 3 _ n 连接 。如果 n 是迷人的,返回 true,否则返回 false 。连接 两个数字表示把它们首尾相接连在一起。比方说 121 和 371 连接得到 121371 。
输入:n = 192输出:true解释:我们将数字 n = 192 ,2 _ n = 384 和 3 _ n = 576 连接,得到 192384576 。这个数字包含 1 到 9 恰好各一次。
输入:n = 100输出:false解释:我们将数字 n = 100 ,2 _ n = 200 和 3 _ n = 300 连接,得到 100200300 。这个数字不符合上述条件。
12345678910var isFascinating = function(n) { n = `${n}${n * 2}${n * 3}`; if(n. ...
倍数求和
倍数求和
给你一个正整数 n ,请你计算在 [1,n] 范围内能被 3、5、7 整除的所有整数之和。返回一个整数,用于表示给定范围内所有满足约束条件的数字之和。
输入:n = 7输出:21解释:在 [1, 7] 范围内能被 3、5、7 整除的所有整数分别是 3、5、6、7 。数字之和为 21。
输入:n = 10输出:40解释:在 [1, 10] 范围内能被 3、5、7 整除的所有整数分别是 3、5、6、7、9、10 。数字之和为 40。
1234567var sumOfMultiples = function(n) { let res = 0; for (let i = 1; i <= n; i++) { if (i % 3 === 0 || i % 5 === 0 || i % 7 === 0) res += i; } return res;};
各位相加
各位相加
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。
输入: num = 38输出: 2解释: 各位相加的过程为:38 –> 3 + 8 –> 1111 –> 1 + 1 –> 2由于 2 是一位数,所以返回 2。
输入: num = 0输出: 0
123var addDigits = function(num) { return num == 0 ? num : (num - 1) % 9 + 1};
数字 1 的个数
数字 1 的个数
给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。
输入:n = 13输出:6
输入:n = 0输出:0
12345678910111213var countDigitOne = function(n) { let count = 0; for (let i = 1; i <= n; i *= 10) { let divide = i * 10; let p = Math.floor(n / divide), k = n % divide, rest = 0; count += p * i; rest = (k > (2 * i - 1)) ? i : ((k < i) ? 0 : k - i + 1); count += rest; } return count;};
判断是否可以赢得数字游戏
判断是否可以赢得数字游戏
给你一个 正整数 数组 nums。Alice 和 Bob 正在玩游戏。在游戏中,Alice 可以从 nums 中选择所有个位数 或 所有两位数,剩余的数字归 Bob 所有。如果 Alice 所选数字之和 严格大于 Bob 的数字之和,则 Alice 获胜。如果 Alice 能赢得这场游戏,返回 true;否则,返回 false。
输入:nums = [1,2,3,4,10]输出:false解释:Alice 不管选个位数还是两位数都无法赢得比赛。
123456789101112var canAliceWin = function(nums) { let single_digit_sum = 0; let double_digit_sum = 0; for (const num of nums) { if (num < 10) { single_digit_sum += num; } else { double_d ...
求出硬币游戏的赢家
求出硬币游戏的赢家
给你两个 正 整数 x 和 y ,分别表示价值为 75 和 10 的硬币的数目。Alice 和 Bob 正在玩一个游戏。每一轮中,Alice 先进行操作,Bob 后操作。每次操作中,玩家需要拿走价值 总和 为 115 的硬币。如果一名玩家无法执行此操作,那么这名玩家 输掉 游戏。两名玩家都采取 最优 策略,请你返回游戏的赢家。
输入:x = 2, y = 7输出:”Alice”解释:游戏一次操作后结束:Alice 拿走 1 枚价值为 75 的硬币和 4 枚价值为 10 的硬币。
123var winningPlayer = function(x, y) { return Math.min(x, Math.floor(y / 4)) % 2 ? "Alice" : "Bob";};
Pow(x, n)
Pow(x, n)
实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,x^n )。
输入:x = 2.00000, n = 10输出:1024.00000
输入:x = 2.10000, n = 3输出:9.26100
12345678910111213var myPow = function(x, n) { // n=0 直接返回 1 if (n === 0) return 1; // n<0 时 x 的 n 次方等于 1 除以 x 的 -n 次方分 if (n < 0) return 1 / myPow(x, -n); // n 是奇数时 x 的 n 次方 = x*x 的 n-1 次方 if (n % 2) return x * myPow(x, n - 1); // n 是偶数,使用分治,一分为二,等于 x*x 的 n/2 次方 return myPow(x * x, n / 2);};
最小偶倍数
最小偶倍数
给你一个正整数 n ,返回 2 和 n 的最小公倍数(正整数)。
输入:n = 5输出:10解释:5 和 2 的最小公倍数是 10 。
输入:n = 6输出:6解释:6 和 2 的最小公倍数是 6 。注意数字会是它自身的倍数。
123var smallestEvenMultiple = function(n) { return n << (n & 1);};
全 0 子数组的数目
全 0 子数组的数目
给你一个整数数组 nums ,返回全部为 0 的 子数组 数目。子数组 是一个数组中一段连续非空元素组成的序列。
输入:nums = [1,3,0,0,2,0,0,4]输出:6解释:子数组 [0] 出现了 4 次。子数组 [0,0] 出现了 2 次。不存在长度大于 2 的全 0 子数组,所以我们返回 6 。
输入:nums = [0,0,0,2,0,0]输出:9解释:子数组 [0] 出现了 5 次。子数组 [0,0] 出现了 3 次。子数组 [0,0,0] 出现了 1 次。不存在长度大于 3 的全 0 子数组,所以我们返回 9 。
12345678910111213var zeroFilledSubarray = function(nums) { let count = 0, sum = 0; for (let i = 0; i < nums.length; i++) { if (nums[i] !== 0) { if (count > 0) sum += coun ...