又一道简单等级的题,小白打小怪~
最大时间:
给定一个由 4 位数字组成的数组,返回可以设置的符合 24 小时制的最大时间。
最小的 24 小时制时间是 00:00,而最大的是 23:59。从 00:00 (午夜)开始算起,过得越久,时间越大。
以长度为 5 的字符串返回答案。如果不能确定有效时间,则返回空字符串。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-time-for-given-digits
侵删
思路一:
可能很多同学拿到题的第一时间是想直接判断最小值应该小于3,次小值应该小于6等,按照条件去筛选,这样就会分很多if else,一定程度上增加了做题的时间
思路二:
对于本题,由于只有四位,可以直接遍历所有排列,也不会有太多排列,此时暴力反而会节省思考的时间
class Solution(object):
def largestTimeFromDigits(self, A):
"""
:type A: List[int]
:rtype: str
"""
max_time=-1
for h1,h2,m1,m2 in itertools.permutations(A):
hour=h1*10+h2
mins=m1*10+m2
time=hour*60+mins
if hour>23 or mins>59:
continue
elif max_time<time:
max_time=time
return "{:02d}:{:02d}".format(*divmod(max_time, 60)) if max_time>-1 else ""
知识点:
-
itertools.permutations
-
"{:02d}:{:02d}".format format的用法非常多可以直接转换进制等,有兴趣的同学可以查查,比如网上查以下几个小?
tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}" # {1:{3}^10} 1表示位置,{3}表示用第3个参数来填充,^表示居中,10表示占10个位置
'{:,}'.format(1234567890)=》 '1,234,567,890'
^、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充