时钟

时钟

http://www.nowcoder.com/questionTerminal/72f3cc4658024d12bcc122c29b35394e

把时间当成字符串来处理,分析每一个位置字符串可能出现的情况。

每一个字符串的格式都是完全相同的,从左到右依次分析:

记字符串的初始位置为 0。
那么判断一个时间是否合法,需要考虑的位置只有第 0、1、3 和 6 位。
例如:case = ['1', '9', ':', '0', '0', ':', '2', '3']

先来看小时 (0 位置和 1 位置):

  1. 小时的第一位只能是 0,1 或 2 case[0] 只能取 0,1,2 (合法直接跳过);
  2. 在小时第一位为 0 或 1 时,小时的第 2 位可以为 [0..9] case[0] 属于 [0..1] 时,case[1] 可以取 [0..9] (case[0] 和 case[1] 都不用更改);
  3. 在小时第一位为 2 时,小时的第二位只能取 0,1,2,3 case[0] == 2,case[1] 可以取 [0..3],如果此时 case[1] > 3,因为要求最小改动和字典序最小,那么只需要把 case[0] 的位置改成 0 就好了。例如 28 08;
  4. 当小时第一位大于 2 时,只要变成 0 就好了,因为在第二条中分析过,当 case[0] == 1 时,case[1] 可以取 [0..9]。

分钟和秒钟是一样的,只要左边(case[3] 和 case[6]) 大于 5,直接修改为 0 即可。例如:99 09、75 05。

按照这个思路写出代码如下:

def process(case):
    '''Modify time to valid value.

    case: list, ['1', '9', ':', '0', '0', ':', '2', '3']
                ['2', '8', ':', '1', '9', ':', '9', '7']
                ['3', '8', ':', '9', '9', ':', '9', '7']
    '''

    if case[0] == '2':
        if case[1] > '3':
            case[0] = '0'
    if case[0] > '2':
        case[0] = '0'
    if case[3] > '5':
        case[3] = '0'
    if case[6] > '5':
        case[6] = '0'


if __name__ == '__main__':
    case_count = int(input())
    for i in range(case_count):
        case = [x for x in input().strip()]
        process(case)
        print(''.join(case))
全部评论

相关推荐

头像
04-17 09:29
已编辑
湖南农业大学 后端
睡姿决定发型丫:本硕末9也是0offer,简历挂了挺多,只有淘天 美团 中兴给了面试机会,淘天二面挂,美团一面kpi面,中兴一面感觉也大概率kpi(虽然国企,但一面0技术纯聊天有点离谱吧)
点赞 评论 收藏
分享
05-12 16:04
已编辑
江西财经大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务