Description一个二进制表上面有4个LED代表小时(0-11),下面的6个LED代表分钟(0-59)。每个LED代表0或1,最低有效位在右边。例如,上面的二进制手表显示为“3:25”。给定一个代表当前点亮的LED数量的非负整数n,返回手表可能代表的所有可能时间。示例:输入:n=1返回:["1:00","2:00","4:00","8:00","0:01","0:02","0:04","0:08","0:16","0:32"]注:顺序输出无关紧要。小时不能包含前导零,例如“01:00”无效,它应该是“1:00”。分钟必须由两位数字组成,并且可以包含前导零,例如“10:2”无效,它应该是“10:02”。二进制手表的描述有4个,顶部3个LED代表小时(0-11),底部6个LED代表分钟(0-59)。每个LED代表0或1,最低位在右边。例如,上面的二进制表显示为“3:25”。给定一个非负整数n,表示当前点亮的LED数量,返回所有可能的次数。案例:输入:n=1返回:["1:00","2:00","4:00","8:00","0:01","0:02","0:04","0:08","0:16","0:32"]注:输出顺序不限。小时不以零开头,例如“01:00”是不允许的,应该是“1:00”。分钟必须由两位数字组成,并且可以以零开头,例如“10:2”无效,应为“10:02”。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路是给每个位置(范围是[0,9],一共10个位置)编号,组成一个键值对;键号是数值拨盘对应的时间。其中,分钟用range(0,6)进行编号;小时数的范围是(6,10);对于输入num,使用Python的组合模块从list(range(10))中随机选择num个数字;然后用这些数字作为key,得到对应的小时和分钟,组成当前时间;丢弃不符合要求的时间;#-*-coding:utf-8-*-#@Author:何瑞#@CreateDate:2019-09-0322:35:31#@LastModifiedby:HeRui#@LastModifiedtime:2019-09-0408:59:55从输入importListfromitertoolsimportcombinationsclass解决方案:defreadBinaryWatch(self,num:int)->List[str]:minutes={i:2**iforiinrange(6)}hours={i:2**(i-6)foriinrange(6,10)}times=map(lambdax:self.__transfer(x,minutes,hours),combinations(list(range(10)),num))returnfilter(lambdax:xisnotNone,times)def__transfer(self,com,minutes,hours):minute=sum(map(lambdax:minutes.get(x,0),com))小时=sum(map(lambdax:hours.get(x,0),com))return"{}:{:02d}".format(hour,minute)ifhour<=11andminute<=59elseNonesource代码文件在这里?
