You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

给定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;
}

代码说明

  1. 排列去重:递归生成排列时,用used集合跳过已处理的相同数字,避免生成重复排列,减少无效计算。
  2. 时间验证逻辑:拆分出的小时必须在0-23区间,分钟必须在0-59区间,严格符合24小时制规则。
  3. 有效时间去重:用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 16:20:47