[LeetCode]--401. Binary Watch(递归有点懵)

来源:互联网 发布:淘宝感谢卡 编辑:程序博客网 时间:2024/06/01 18:16

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 List<String> readBinaryWatch(int num) {        List<String> res = new ArrayList<String>();        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<Integer> list = new ArrayList<Integer>();    List<Integer> hs = new ArrayList<Integer>();    List<Integer> ms = new ArrayList<Integer>();    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);            }        }    }}
0 0