《LeetCode之每日一题》:118.替换隐藏数字得到的最晚时间

Posted 是七喜呀!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《LeetCode之每日一题》:118.替换隐藏数字得到的最晚时间相关的知识,希望对你有一定的参考价值。

替换隐藏数字得到的最晚时间


题目链接: 替换隐藏数字得到的最晚时间

有关题目

给你一个字符串 time ,格式为 hh:mm(小时:分钟),
其中某几位数字被隐藏(用 ? 表示)。

有效的时间为 00:0023:59 之间的所有时间,包括 00:0023:59 。

替换 time 中隐藏的数字,返回你可以得到的最晚有效时间。
示例 1:

输入:time = "2?:?0"
输出:"23:50"
解释:以数字 '2' 开头的最晚一小时是 23 ,
以 '0' 结尾的最晚一分钟是 50
示例 2:

输入:time = "0?:3?"
输出:"09:39"
示例 3:

输入:time = "1?:22"
输出:"19:22"
提示:

time 的格式为 hh:mm
题目数据保证你可以由输入的字符串生成有效的时间

题解

法一:暴力法

思路:观察到最晚时间,其实是递增的
class Solution {
public:
    string maximumTime(string time) {
        auto good = [](const string& a, const string& b){
            for (int i = 0; i < a.size(); ++i){
                if (a[i] == '?' || a[i] == b[i]){

                }
                else {
                        return false;
                }
            }
            return true;
        };
        string ans;
        for (int i = 0; i < 24; ++i){
            for (int j = 0; j < 60; ++j){
                string p = (i < 10 ? "0" + to_string(i) : to_string(i));
                string q = (j < 10 ? "0" + to_string(j) : to_string(j));
                string r = p + ":" + q;
                if (good(time, r)){
                    ans = r;
                }
            }
        }
        return ans;
    }
};

法二:贪心

char * maximumTime(char * time){
    //time[0] = (time[1] < '4' || time[1] == '?' ? '2' : '1')
    if (time[0] == '?') time[0] = (time[1] >= '4' && time[1] <= '9' ? '1' : '2');

    if (time[1] == '?') time[1] = time[0] == '2' ? '3' : '9';
    if (time[3] == '?') time[3] = '5';
    if (time[4] == '?') time[4] = '9';
    return time;
}

时间复杂度:O(1)
空间复杂度:O(1)

以上是关于《LeetCode之每日一题》:118.替换隐藏数字得到的最晚时间的主要内容,如果未能解决你的问题,请参考以下文章

《LeetCode之每日一题》:212.整数替换

《LeetCode之每日一题》:257.替换所有的问号

《LeetCode之每日一题》:57.完全平方数

《LeetCode之每日一题》:262.累加数

《LeetCode之每日一题》:23. 两数相除

《LeetCode之每日一题》:265.至少是其他数字两倍的最大数