• 401. Binary Watch


    题目:

    A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom represent the minutes (0-59).

    Each LED represents a zero or one, with the least significant bit on the right.

    For example, the above binary watch reads "3:25".

    Given a non-negative integer n which represents the number of LEDs that are currently on, return all possible times the watch could represent.

    Example:

    Input: n = 1
    Return: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]

    Note:

    • The order of output does not matter.
    • The hour must not contain a leading zero, for example "01:00" is not valid, it should be "1:00".
    • The minute must be consist of two digits and may contain a leading zero, for example "10:2" is not valid, it should be "10:02".

    链接:https://leetcode.com/problems/binary-watch/#/description

    3/22/2017

    已经不会做题了,看来还是得好好学算法

    抄别人的算法,优点是好简单啊,缺点是我还是不会backtracking...

    注意Integer.bitCount()这个function很有用啊

    1 public List<String> readBinaryWatch(int num) {
    2     List<String> times = new ArrayList<>();
    3     for (int h=0; h<12; h++)
    4         for (int m=0; m<60; m++)
    5             if (Integer.bitCount(h * 64 + m) == num)
    6                 times.add(String.format("%d:%02d", h, m));
    7     return times;        
    8 }

    别人的dfs做法:因为我不会

     1 class Solution(object):
     2     def readBinaryWatch(self, n):
     3         
     4         def dfs(n, hours, mins, idx):
     5             if hours >= 12 or mins > 59: return
     6             if not n:
     7                 res.append(str(hours) + ":" + "0" * (mins < 10) + str(mins))
     8                 return
     9             for i in range(idx, 10):
    10                 if i < 4: 
    11                     dfs(n - 1, hours | (1 << i), mins, i + 1)
    12                 else:
    13                     k = i - 4
    14                     dfs(n - 1, hours, mins | (1 << k), i + 1)
    15         
    16         res = []
    17         dfs(n, 0, 0, 0)
    18         return res

    其他算法链接:https://discuss.leetcode.com/category/526/binary-watch

  • 相关阅读:
    敌兵布阵
    Points on Cycle
    Hero
    E~最少拦截系统
    C
    A
    J
    H
    G
    A
  • 原文地址:https://www.cnblogs.com/panini/p/6608646.html
Copyright © 2020-2023  润新知