就是分鐘保留兩位小數(shù),計(jì)算0-11和0-59分別把他們轉(zhuǎn)成二進(jìn)制以后計(jì)算其中數(shù)字1的個(gè)數(shù)之和是不是等于num,如果等于留下來
class Solution(object):
def readBinaryWatch(self, num):
"""
:type num: int
:rtype: List[str]
"""
return ["%d:%02d"%(n,m) for n in range(12) for m in range(60) if bin(n).count('1') + bin(m).count('1') == num]
另一種做法:
關(guān)鍵是怎么計(jì)算含有1的個(gè)數(shù)
num & num - 1
class Solution(object):
def readBinaryWatch(self, num):
"""
:type num: int
:rtype: List[str]
"""
hour = {i:self.count1(i) for i in range(12)}
minite = {i:self.count1(i) for i in range(60)}
res = ["%d:%02d"%(h,m) for h in hour for m in minite if hour[h] + minite[m] == num]
return res
def count1(self, num):
count = 0
while num:
count += 1
num &= num - 1
return count