给定4个数字,计算24小时制数字时钟有效时间数的JavaScript实现
解法:用JavaScript统计4个数字可组成的有效24小时时间数量
问题描述
给定4个整数A、B、C、D,编写函数solution(A,B,C,D),统计能在24小时制数字时钟上显示的有效时间数量,有效时间范围为00:00至23:59。
核心思路
因为只有4个数字,我们可以生成所有不重复的4位排列,再对每个排列拆分出小时和分钟,验证是否符合时间规则,最后通过集合自动去重,统计唯一的有效时间总数。
实现代码
function solution(A, B, C, D) { const digits = [A, B, C, D]; const validTimes = new Set(); // 递归生成所有不重复的4位排列 function generatePermutations(arr, current = []) { if (current.length === 4) { const hour = current[0] * 10 + current[1]; const minute = current[2] * 10 + current[3]; // 验证时间有效性 if (hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59) { // 格式化为标准两位字符串,避免"1:2"这类不规范格式 const timeStr = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`; validTimes.add(timeStr); } return; } const used = new Set(); for (let i = 0; i < arr.length; i++) { if (used.has(arr[i])) continue; used.add(arr[i]); generatePermutations([...arr.slice(0, i), ...arr.slice(i + 1)], [...current, arr[i]]); } } generatePermutations(digits); return validTimes.size; }
代码说明
- 排列去重:递归生成排列时,用
used集合跳过已处理的相同数字,避免生成重复排列,减少无效计算。 - 时间验证逻辑:拆分出的小时必须在
0-23区间,分钟必须在0-59区间,严格符合24小时制规则。 - 有效时间去重:用
Set存储格式化后的时间字符串(如"09:05"),自动过滤重复的时间组合,最终返回集合的大小即为有效时间数量。
示例测试
- 输入
solution(1,2,3,4),有效时间包括12:34、13:24、21:34等,返回总数为16。 - 输入
solution(0,0,0,0),仅00:00有效,返回1。 - 输入
solution(2,3,5,9),仅23:59有效,返回1。
内容的提问来源于stack exchange,提问作者SCOCB
相关产品推荐
相关产品推荐

