本文共 2232 字,大约阅读时间需要 7 分钟。
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 = 1Return: ["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”.分别对小时、分钟两个部分进行回溯,然后将结果进行组合。
public class Solution { int hour[] = new int[] { 1, 2, 4, 8 }; int minu[] = new int[] { 1, 2, 4, 8, 16, 32 }; public ListreadBinaryWatch(int num) { List res = new ArrayList (); for (int i = 0; i <= num; i++) { dspCombination(hour, i, 0, true); dspCombination(minu, num - i, 0, false); for (int m : hs) { for (int n : ms) { if (n == 0) res.add("" + m + ":00"); else { if (n / 10 == 0) res.add("" + m + ":0" + n); else res.add("" + m + ":" + n); } } } hs.clear(); ms.clear(); } return res; } List list = new ArrayList (); List hs = new ArrayList (); List ms = new ArrayList (); private void dspCombination(int[] nums, int k, int level, boolean flag) { if (list.size() == k) { int sum = 0; for (int num : list) { sum += num; } if (flag) { // 当前是hour if (sum <= 11) hs.add(sum); } else { if (sum <= 59) ms.add(sum); } return; } else if (list.size() > k) { return; } else { for (int i = level; i < nums.length; i++) { list.add(nums[i]); dspCombination(nums, k, i + 1, flag); list.remove(list.size() - 1); } } }}
转载地址:http://mpbzx.baihongyu.com/