LeetCode 5661. 替换隐藏数字得到的最晚时间 做题小结

题目

给你一个字符串 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
题目数据保证你可以由输入的字符串生成有效的时间

解题思路与算法

  • 字符串“00:00” 的4个0分别看做x1,x2,x3,x4
  • 如果x3未知,x3最大为5;如果x4未知,x4最大为9
  • x1,x2有三种情况:
    • x1,x2未知: x1最大为2,x2最大为3
    • x1未知: 如果x2大于3,那x1最大为1。因为没有24,25,,,,这样的小时,最大为23,最大具体时间为23:59;如果x2小于等于3,那么x1最大为2
    • x2未知: 如果x1为2,x2最大只能为3;如果x1小于2,那么x2最大可以为9

代码

class Solution {
    	public String maximumTime(String time) {
		char[] ch = time.toCharArray();
		String x1=String.valueOf(ch[0]);
		String x2=String.valueOf(ch[1]);
		String x3=String.valueOf(ch[3]);
		String x4=String.valueOf(ch[4]);
		if(x1.equals("?") && x2.equals("?") ) {
			ch[0]='2';
			ch[1]='3';
		}else if (x1.equals("?")) {
			if((int)ch[1]-(int)('0')>3) {
				ch[0]='1';
				
			}else {
				ch[0]='2';
			}
		}else if (x2.equals("?")) {
			if((int)ch[0]-(int)('0')==2) {
				ch[1]='3';
			}else {
				ch[1]='9';
			}
		}
		if(x3.equals("?")) {
			ch[3]='5';
		}
		if(x4.equals("?")) {
			ch[4]='9';
		}

		return String.valueOf(ch);

	}

}
posted @ 2021-03-07 12:00  nmydt  阅读(134)  评论(0编辑  收藏  举报