Skip to content

401. Binary Watch

Jacky Zhang edited this page Sep 21, 2016 · 1 revision

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.

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".

解题思路为backtracking。

注意点为:

  1. 添加string时注意格式;
  2. 判断hour和minute是否超出,若超出则不进行递归,继续循环。
public class Solution {
    
    private int[] LED = {1,2,4,8,1,2,4,8,16,32};
    
    public List<String> readBinaryWatch(int num) {
        List<String> res = new ArrayList<>();
        helper(num, 0, 0, 0, res);
        return res;
    }
    
    private void helper(int num, int start, int h, int m, List<String> res) {
        if(num == 0) {
            res.add(String.format("%d:%02d", h, m));
        }
        if(LED.length - start < num) return;
        for(int i = start; i < LED.length; i++) {
            if(i < 4) {
                if(h + LED[i] > 11) continue;
                h += LED[i];
            } else {
                if(m + LED[i] > 59) continue;
                m += LED[i];
            }
            helper(num-1, i+1, h, m, res);
            if(i < 4) {
                h -= LED[i];
            } else {
                m -= LED[i];
            }
        }
    }
}
Clone this wiki locally