Мне нужно найти все возможные комбинации ключей данной карты, включая дубликаты, которые образуют определенную строку. Проблема выглядит довольно простой, но я даже не знаю, с чего начать.
Я уже пробовал перебор всех существующих комбинаций, которые потерпели неудачу, когда входная строка не содержала все существующие ключи, не говоря уже о том, что они были ужасно неэффективны.
Следующим моим предположением было использование рекурсивных функций. К сожалению, я далеко не лучший, когда дело доходит до их использования; после пары часов слепой игры и поиска в Google мне наконец-то хватило и я решил задать вопрос здесь.
Вот мой код, лишенный небольшой логики c, которая у меня была:
var map = {
"01": "A",
"100": "B",
"101": "C",
"10": "D",
"111": "E",
"000": "F"
}
function waysToDecode(input, keys, values) {
...
return arrayOfPossibleDecodings;
}
Вход:
>> waysToDecode("1010110", Object.keys(map), Object.values(map));
Выход:
["DCD", "CAD"]
Любая помощь будет оценена. Кроме того, мне интересно, если этот или подобный алгоритм имеет имя; проблема выглядит достаточно общей, чтобы ее можно было решить.