Алгоритм двоичных часов (Java)

Я пытаюсь написать алгоритм, который возвращает все возможные значения времени, которые может представлять несколько огней на двоичных часах.

Вся проблема с деталями можно найти здесь: https://leetcode.com/problems/binary-watch/

public class Solution {
public List<String> readBinaryWatch(int num) {
    List<String> result = new ArrayList<String>();
    int[] time = new int[] {1, 2, 4, 8, 1, 2, 4, 8, 16, 32};

    helper(result, time, num, 0, 0, 0);

    return result;
}

public void helper(List<String> result, int[] time, int num, int start, int hour, int minute){
    if (num == 0){
        if (hour < 11 && minute < 59){
            String x = "" + hour + ":";
            if (minute < 10){x = x + "0";}
            x = x + minute;
            result.add(x);
        }
    } else {
        for (int i = start; i < time.length; i++){
            int h, m;
            if (i >= 4){h = hour; m = minute + time[i];} else {h = hour + time[i]; m = minute;}
            helper(result, time, num - 1, start + 1, h, m);
        }
    }

}}

Мое решение, похоже, терпит неудачу в некоторых тестах, и я просто не могу понять, почему. Предложения?

java,algorithm,

0

Ответов: 1


1 принят

Вы пропускаете параметры, всегда выбирая время [i]. Кроме того, для чего вы используете? либо выберите время [начало] или нет - два вызова рекурсии:

public void helper(List<String> result, int[] time, int num, int start, int hour, int minute){
    if (start == time.length && num > 0)
        return;

    if (num == 0){
        if (hour <= 12 && minute <= 59){
            String x = "" + hour + ":";
            if (minute < 10){x = x + "0";}
            x = x + minute;
            result.add(x);
        }
    } else {
        helper(result, time, num, start + 1, hour, minute);
        int h, m;
        if (start >= 4){h = hour; m = minute + time[start];} else {h = hour + time[start]; m = minute;}
        helper(result, time, num - 1, start + 1, h, m);
    }
}
Java, алгоритм,
Похожие вопросы