The major approach to this problem is to consider how many lights are on for hours and how many are for minutes.
The max number of lights for hours is min(num, 3), because hour <= 11.
The min number of lights for hours is max(0, num-5) because minutes <= 59, so only 5 lights for minutes at most.
Then we need a function to return all possible numbers for binary numbers with n digits where m of them are ones.
def possibleNums(n, m): '''Return all possible nums of n digits with m equal to one''' if m == n: return [pow(2, n)-1] if m == 0: return  zero = possibleNums(n-1, m) one = possibleNums(n-1, m-1) one = [z + pow(2, n-1) for z in one] return zero + one
Then our main program will construct every possible hour and minute combination and output to answer:
min_hour = max(0, num-5) max_hour = min(3, num) for i in range(min_hour, max_hour+1): hours = possibleNums(4, i) hours = [h for h in hours if h <= 11] minutes = possibleNums(6, num-i) minutes = [m for m in minutes if m <= 59] for h in hours: for m in minutes: if m < 10: m = '0' + str(m) else: m = str(m) ans.append(str(h)+':'+m) # print hours, minutes return ans
My first time sharing solution, hope it helps!