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

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

原题描述

给你一个字符串 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"

解题方法

1.处理小时.分三种情况

  • 小时个位和十位都为?,最晚一定是23
  //小时两位都为?,最晚一定是23
if (chars[0]=='?'&&chars[1]=='?'){ //如 ??:59
    chars[0]='2';
     chars[1]='3';
}
  • 小时十位为?,个位不为?
if (chars[0]=='?'){//小时十位为? 
    if (chars[1]>'3'){// 个位大于3 十位最大只能取1  如 ?5:59
        chars[0]='1';
    }else {//个位小于等于2  如 ?3:59
         chars[0]='2';// 十位最大可以取2
    }
}
  • 十位不为? ,个位是?
if (chars[1]=='?'){//十位不为? 个位是? 
    // 十位是2  个位只能取3  最大是23   如 2?:59  
    if (chars[0]=='2'){ 
        chars[1]='3';
    }else {// 十位是1或0 ,个位都可以取9 最大是19 如 1?:59 
        chars[1]='9';
    } 
}

2.处理分钟,个位十位相互不影响,单独处理

//处理分钟 个位十位相互不影响 单独处理
//分钟十位为? 就取5  23:?9 
if (chars[3]=='?'){
    chars[3]='5';
}
//分钟个位为? 就取9  23:5? 
if (chars[4]=='?'){
    chars[4]='9';
 }

复杂度

  • 时间复杂度: O(1)

  • 空间复杂度: O(1)

Code


class Solution {
       public String maximumTime(String time) {
        char[] chars = time.toCharArray();
         //处理小时 个位和十位相互影响 需要一起处理
         //小时两位都为?,最晚一定是23
        if (chars[0]=='?'&&chars[1]=='?'){ //如 ??:59
            chars[0]='2';
            chars[1]='3';
        }else if (chars[0]=='?'){//小时十位为? 
            if (chars[1]>'3'){// 个位大于3 十位最大只能取1  如 ?5:59
                chars[0]='1';
            }else {//个位小于等于2  如 ?3:59
                chars[0]='2';// 十位最大可以取2
            }
        }else if (chars[1]=='?'){//十位不为? 个位是? 
            // 十位是2  个位只能取3  最大是23   如 2?:59  
            if (chars[0]=='2'){ 
                chars[1]='3';
            }else {// 十位是1或0 ,个位都可以取9 最大是19 如 1?:59 
                chars[1]='9';
            } 
        }
         //处理分钟 个位十位相互不影响 单独处理
        if (chars[3]=='?'){//分钟十位为? 就取5  23:?9 
            chars[3]='5';
        }
        if (chars[4]=='?'){//分钟个位为? 就取9  23:5? 
            chars[4]='9';
        }
      return  new String(chars);
    }
}

执行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值