《LeetCode之每日一题》:118.替换隐藏数字得到的最晚时间
Posted 是七喜呀!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《LeetCode之每日一题》:118.替换隐藏数字得到的最晚时间相关的知识,希望对你有一定的参考价值。
题目链接: 替换隐藏数字得到的最晚时间
有关题目
给你一个字符串 time ,格式为 hh:mm(小时:分钟),
其中某几位数字被隐藏(用 ? 表示)。
有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和 23: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.替换隐藏数字得到的最晚时间的主要内容,如果未能解决你的问题,请参考以下文章