前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >脚撕LeetCode(1736)Easy

脚撕LeetCode(1736)Easy

作者头像
JathonKatu
发布2022-01-18 08:09:35
1060
发布2022-01-18 08:09:35
举报
文章被收录于专栏:JathonKatu

题目地址:https://leetcode-cn.com/problems/latest-time-by-replacing-hidden-digits/

给你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。 有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和 23:59 。 替换time 中隐藏的数字,返回你可以得到的最晚有效时间。

代码语言:javascript
复制
示例 1:
输入:time = "2?:?0" 
输出:"23:50" 
解释:以数字 '2' 开头的最晚一小时是 23 ,以 '0' 结尾的最晚一分钟是 50 。
示例 2:
输入:time = "0?:3?" 
输出:"09:39" 
示例 3:
输入:time = "1?:22" 
输出:"19:22" 


https://leetcode-cn.com/problems/latest-time-by-replacing-hidden-digits/

提示:time 的格式为 hh:mm 题目数据保证你可以由输入的字符串生成有效的时间 https://leetcode-cn.com/problems/latest-time-by-replacing-hidden-digits/

这道题主要有几个限制,首先时上如果第二位>4则第一个为不能为2,同样如果第一位=2则第二位不能>3

分上面无脑5和9就行,没有什么顾及,所以这道题的重点在时

于是就出现了以第一个爆破法

一、爆破法一

执行结果如下:

159 / 159 个通过测试用例

状态:通过

执行用时: 0 ms

内存消耗: 36.7 MB

代码语言:javascript
复制
public static String maximumTimeMe(String time) {
    char[] ansArr = time.toCharArray();
    for (int i = 0; i < ansArr.length; i++) {
        if ('?' == ansArr[i])
            switch (i) {
                case 0:
                    ansArr[i] = ansArr[1] < '4' || ansArr[1] == '?' ? '2' : '1';
                    break;
                case 1:
                    ansArr[i] = ansArr[0] == '2' ? '3' : '9';
                    break;
                case 3:
                    ansArr[i] = '5';
                    break;
                case 4:
                    ansArr[i] = '9';
                    break;
                default:
                    break;
            }
    }
    return new String(ansArr);
}

时间:52% 空间:41%,作为一个胜负欲星人肯定是不满意的,所以我们想到了一个爆破中的爆破法:

二、爆破法二

执行结果如下:

159 / 159 个通过测试用例

状态:通过

执行用时: 0 ms

内存消耗: 36 MB

代码语言:javascript
复制
public static String maximumTimeMe2(String time) {
    char[] ansArr = time.toCharArray();
    for (int i = 0; i < ansArr.length; i++) {
        if ('?' == ansArr[i])
            switch (i) {
                case 0:
                    if ('?' == ansArr[1]) {
                        ansArr[0] = '2';
                        ansArr[1] = '3';
                    } else {
                        ansArr[0] = ansArr[1] < '4' ? '2' : '1';
                    }
                    i += 2;
                    break;
                case 1:
                    ansArr[i] = ansArr[0] == '2' ? '3' : '9';
                    i += 1;
                    break;
                case 3:
                    ansArr[i] = '5';
                    break;
                case 4:
                    ansArr[i] = '9';
                    break;

            }
    }
    return new String(ansArr);
}

时间100%,空间50%。这个空间我还是很不满意,莫非还能不用char[]数组做?

试试总感觉用StringBuilder空间会比数组更大,所以我们还是直接看看评论区的大佬们怎么写的。

试了一下评论区的大佬们的算法都是双50左右,于是我看了一下

?????同一段代码的空间差别这么大?最后一次执行直接时间100%,空间99.7%。。

我吐了。果然leetcode的百分比不是一定的,以后觉得自己很perface的时候试试多执行几次hhhhhh。

(盲猜时因为测试用例的不同,但是我没有证据。。。)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JathonKatu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档