侧边栏壁纸
博主头像
GabrielxD

列車は必ず次の駅へ。では舞台は?私たちは?

  • 累计撰写 675 篇文章
  • 累计创建 128 个标签
  • 累计收到 26 条评论

目 录CONTENT

文章目录

【暴力, 枚举】有效时间的数目【力扣第 89 场双周赛】

GabrielxD
2022-10-16 / 0 评论 / 0 点赞 / 224 阅读 / 605 字
温馨提示:
本文最后更新于 2022-11-04,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

题目

6208. 有效时间的数目


给你一个长度为 5 的字符串 time ,表示一个电子时钟当前的时间,格式为 "hh:mm" 。最早 可能的时间是 "00:00" ,最晚 可能的时间是 "23:59" 。

在字符串 time 中,被字符 ? 替换掉的数位是 未知的 ,被替换的数字可能是 0 到 9 中的任何一个。

请你返回一个整数 answer ,将每一个 ? 都用 0 到 9 中一个数字替换后,可以得到的有效时间的数目。

示例 1:

输入:time = "?5:00"
输出:2
解释:我们可以将 ? 替换成 0 或 1 ,得到 "05:00" 或者 "15:00" 。注意我们不能替换成 2 ,因为时间 "25:00" 是无效时间。所以我们有两个选择。

示例 2:

输入:time = "0?:0?"
输出:100
解释:两个 ? 都可以被 0 到 9 之间的任意数字替换,所以我们总共有 100 种选择。

示例 3:

输入:time = "??:??"
输出:1440
解释:小时总共有 24 种选择,分钟总共有 60 种选择。所以总共有 24 * 60 = 1440 种选择。

提示:

  • time 是一个长度为 5 的有效字符串,格式为 "hh:mm" 。
  • "00" <= hh <= "23"
  • "00" <= mm <= "59"
  • 字符串中有的数位是 '?' ,需要用 0 到 9 之间的数字替换。

解题

方法一:枚举

思路

数据范围足够小可以随意暴力枚举,这里选择一种比较直观且简单的方式:
枚举一天中第 014390 \sim 1439 分钟中的每个时刻,如果除了问号位不同而其它位都相同就把计数(poss)增加。
枚举完成后返回 poss

代码

class Solution {
    public int countTime(String time) {
        char h1 = time.charAt(0);
        char h2 = time.charAt(1);
        char m1 = time.charAt(3);
        char m2 = time.charAt(4);
        int poss = 0;
        for (int minu = 0; minu < 1440; ++minu) {
            String hh = String.format("%02d", minu / 60);
            String mm = String.format("%02d", minu % 60);
            char hh1 = hh.charAt(0);
            char hh2 = hh.charAt(1);
            char mm1 = mm.charAt(0);
            char mm2 = mm.charAt(1);
            if ((h1 == '?' || h1 == hh1) &&
                (h2 == '?' || h2 == hh2) &&
                (m1 == '?' || m1 == mm1) &&
                (m2 == '?' || m2 == mm2)) ++poss;
        }
        return poss;
    }
}
0

评论区