[杨小白]_leetcode_力扣第 89 场双周赛-第一题

149 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第24天,点击查看活动详情

前言

小白算法比较菜,希望能激励我每日更新,从leetcode第一题开始,2022年目标300题,记录从0到1的全过程!!

力扣第 89 场双周赛

力扣第 89 场双周赛-力扣

a了两题,居然还有1000多名,第三题居然是二分做完之后发现了,就算做出来也只能上小百名把 唉,,,,

image.png

image.png

2437. 有效时间的数目

给你一个长度为 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 之间的数字替换。

代码

这个题虽然不难哈,但是要考虑的情况蛮多。主要在小时那里,考虑时的个位需要做很多判断,使用就会漏掉一些条件,然后wa,最后在评论里面看到有人说,先把所有可能的情况存下来,然后暴力匹配给定的字符串,这个做法也很不错。

class Solution {
    public int countTime(String time) {
        int res = 1;
        if(time.charAt(3) == '?') {
            res = 6;
        }
        if (time.charAt(4) == '?') {
            res = res == 1 ? 10 : 60;
        }
        if (time.charAt(0) == '?' && time.charAt(1) == '?') {
            return res * 24;
        }
        if (time.charAt(1) == '?') {
            if (time.charAt(0) == '2') {
                return res*4;
            }else {
                return res * 10;
            }
        }
        if (time.charAt(0) == '?') {
            if (time.charAt(1) >'3') {
                return res * 2;
            } else {
                return res * 3;
            }
        }
        return res;
    }
}

3.结束

第四题还是无从下手,我什么时候能成为四题选手啊!!!!gogogo,刷题刷题,每天一道,三年1000道!!!!