Описание задачи
Реализовать функции для подбора ключей к замкам. Ключ — строка из A-E. Замок может содержать
- (любой символ).
Функции
countKeys(minLocks, locks)
→ количество ключей, открывающих ≥ minLocks замков
findKeys(minLocks, locks)
→ массив строк-ключей
Логика
- Генерируем все ключи длины N: 5N вариантов (A, B, C, D, E)
- Для каждого ключа проверяем, сколько замков он открывает
- Совпадение: key[i] == lock[i] ИЛИ lock[i] == '-'
Пример
Условие
Locks: ["A-B", "-BB"]
minLocks: 2
Key length: 3
Анализ
Замок "A-B": позиция 0='A', 1=любой, 2='B' Замок "-BB": позиция 0=любой, 1='B', 2='B' Ключ открывает ОБА если: Позиция 0: 'A' (из первого) Позиция 1: 'B' (из второго) Позиция 2: 'B' (общее) Единственный ключ: "ABB"
Результат
countKeys(2, locks) → 1
findKeys(2, locks) → ["ABB"]
Ключевые моменты
- Полный перебор: 5N ключей
- Рекурсия с backtracking для генерации