题目:
给定含有6个元素的数组如[0,2,3,0,5,6]
,生成24小时制最大时间如23:56:00
。
输入示例:
[1,2,3,4,5,6]
输出示例:
23:56:41
规定:
①输入是6个取值为0~9范围内的元素的list,可以不用做空值检查。
②输出是HH:MM:SS
格式的字符串。
③如果无法组成有效的24小时制时间,输出InvalidList
,如输入是[8,2,3,6,5,6]
时输出则为InvalidList
。
解题思路
思路:以时分秒分为三组(每组两位如HH/MM/SS),依次判断剩余元素构成的list在限制值下能组成的最大值。
import sys
in_list = list(map(int,input()[1:-1].split(',')))
out_str = ''
def gen_time(in_list):
cnt = 3#遍历3次,时分秒
while(cnt!=0):
#先判断极端值情况24:00:00
if in_list.count(2)==1 and in_list.count(4)==1 and in_list.count(0)==4:
return '24:00:00'
if cnt==3:#时
out_str_Hour = getMaxTime(in_list,23)
if out_str_Hour == 'InvalidList':
return 'InvalidList'
elif cnt==2:
in_list.remove(int(out_str_Hour[0]))#移除已使用元素
in_list.remove(int(out_str_Hour[1]))
out_str_Min = getMaxTime(in_list,59)
if out_str_Min == 'InvalidList':
return 'InvalidList'
elif cnt==1:
in_list.remove(int(out_str_Min[0]))#移除已使用元素
in_list.remove(int(out_str_Min[1]))
out_str_Sec = getMaxTime(in_list,59)
if out_str_Sec == 'InvalidList':
return 'InvalidList'
cnt-=1
out_str = out_str_Hour+':'+out_str_Min+':'+out_str_Sec
return out_str
def getMaxTime(in_list, limit_value):
gen_list = []
for i in in_list:
j_list = in_list.copy()
j_list.remove(i)#此处可以用itertools.permutations生成
for j in j_list:
gen_value = str(i)+str(j)
gen_list.append(gen_value)
gen_list = sorted(gen_list)
for i in range(len(gen_list)):
if gen_list[i]>str(limit_value):
if i !=0:
gen_str = gen_list[i-1]
return gen_str
else:
return 'InvalidList'
else:
gen_str = gen_list[i]
return gen_str
print(gen_time(in_list))
输入输出: