计算列车到站时间
计算列车到站时间
给你一个正整数 arrivalTime 表示列车正点到站的时间(单位:小时),另给你一个正整数 delayedTime 表示列车延误的小时数。返回列车实际到站的时间。注意,该问题中的时间采用 24 小时制。
输入:arrivalTime = 15, delayedTime = 5输出:20解释:列车正点到站时间是 15:00 ,延误 5 小时,所以列车实际到站的时间是 15 + 5 = 20(20:00)。
输入:arrivalTime = 13, delayedTime = 11输出:0解释:列车正点到站时间是 13:00 ,延误 11 小时,所以列车实际到站的时间是 13 + 11 = 24(在 24 小时制中表示为 00:00 ,所以返回 0)。
123var findDelayedArrivalTime = function(arrivalTime, delayedTime) { return (arrivalTime+delayedTime)%24;};
单调递增的数字
单调递增的数字
当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。
输入: n = 10输出: 9
输入: n = 1234输出: 1234
1234567891011121314151617var monotoneIncreasingDigits = function(N) { let n = N.toString(); let arr = Array.from(n); // [x,x,x,x]; let max = N; for (let i = 1; i < arr.length; i++) { // 不是递增 if (arr[i - 1] > arr[i]) { const releng = arr.length - i; // 剩余长度 max = monotoneIncreasingDigits ...
平方数之和
平方数之和
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。
输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5
输入:c = 3输出:false
123456789var judgeSquareSum = function(c) { for (let a = 0; a * a <= c; a++) { let b = Math.floor(Math.sqrt(c - a * a)); if (a * a + b * b === c) { return true; } } return false;};
破冰游戏
破冰游戏
社团共有 num 位成员参与破冰游戏,编号为 0 ~ num-1。成员们按照编号顺序围绕圆桌而坐。社长抽取一个数字 target,从 0 号成员起开始计数,排在第 target 位的成员离开圆桌,且成员离开后从下一个成员开始计数。请返回游戏结束时最后一位成员的编号。
输入:num = 7, target = 4输出:1
输入:num = 12, target = 5输出:0
1234567var iceBreakingGame = function(num, target) { if (num === 1) { return 0; } let prevRemaining = iceBreakingGame(num - 1, target); return (prevRemaining + target) % num;};
最小和分割
最小和分割
给你一个正整数 num ,请你将它分割成两个非负整数 num1 和 num2 ,满足:num1 和 num2 直接连起来,得到 num 各数位的一个排列。换句话说,num1 和 num2 中所有数字出现的次数之和等于 num 中所有数字出现的次数。num1 和 num2 可以包含前导 0 。请你返回 num1 和 num2 可以得到的和的 最小 值。注意:num 保证没有前导 0 。num1 和 num2 中数位顺序可以与 num 中数位顺序不同。
输入:num = 4325输出:59解释:我们可以将 4325 分割成 num1 = 24 和 num2 = 35 ,和为 59 ,59 是最小和。
输入:num = 687输出:75解释:我们可以将 687 分割成 num1 = 68 和 num2 = 7 ,和为最优值 75 。
12345678var splitNum = function(num) { const s = num.toString().split('').sort(); const a = [0, 0]; ...
斐波那契数
斐波那契数
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给定 n ,请计算 F(n) 。答案需要取模 1e9+7(1000000007) ,如计算初始结果为:1000000008,请返回 1。
输入:n = 2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1
输入:n = 3输出:2解释:F(3) = F(2) + F(1) = 1 + 1 = 2
123456789var fib = function(n) { let n1 = 0, n2 = 1, sum; for(let i = 0; i < n; i++){ sum = (n1 + n2) % 1000000007; n1 = n2; n2 = sum; } return n1; ...
二进制数转字符串
二进制数转字符串
二进制数转字符串。给定一个介于 0 和 1 之间的实数(如 0.72),类型为 double,打印它的二进制表达式。如果该数字无法精确地用 32 位以内的二进制表示,则打印“ERROR”。
输入:0.625输出:”0.101”
输入:0.1输出:”ERROR”提示:0.1 无法被二进制准确表示
12345678910var printBin = function(num) { let ans = '0.' while (num && ans.length <= 32) { num = num * 2; const k = num % 2 >> 0; ans += k; num -= k; } return ans.length > 32 ? 'ERROR' : ans;};
动态口令
动态口令
某公司门禁密码使用动态口令技术。初始密码为字符串 password,密码更新均遵循以下步骤:设定一个正整数目标值 target将 password 前 target 个字符按原顺序移动至字符串末尾请返回更新后的密码字符串。
输入: password = “s3cur1tyC0d3”, target = 4输出: “r1tyC0d3s3cu”
输入: password = “lrloseumgh”, target = 6输出: “umghlrlose”
123456789101112131415var dynamicPassword = function(password, target) { let res = []; let start = s.length - n; let index = 0; for(let i = 0; i < s.length; i++) { if(i < n) { res[start] = s[i]; start+ ...
点名
点名
某班级 n 位同学的学号为 0 ~ n-1。点名结果记录于升序数组 records。假定仅有一位同学缺席,请返回他的学号。
输入: records = [0,1,2,3,5]输出: 4
输入: records = [0, 1, 2, 3, 4, 5, 6, 8]输出: 7
1234567891011121314var takeAttendance = function(records) { let left = 0 let right = records.length - 1 let mid = left + ((right - left) >> 1) while(left <= right){ if(mid === records[mid]){ left = mid + 1 } else { right = mid - 1 } mid = left + ((right - left) >> 1) } return ...
计数质数
计数质数
给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。
输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
123456789101112131415var countPrimes = function(n) { let count = 0; let signs = new Uint8Array(n); for (let i = 2; i < n; i++) { if (!signs[i - 1]) { count++; for (let j = i * i; j <= n; j += i) { signs[j - 1] = true; } } } return count;};