В этой задаче LeetCode нам дается набор цифр в виде цифр на клавиатуре телефона (0–9) и предлагается составить все возможные комбинации букв, которые могут быть созданы из этих цифр.

Другими словами, учитывая число 2, наши комбинации равны a, b и c. но, учитывая 23, наши комбинации — это ad, ae, af, bd, be, bf, cd, ce и cf, а учитывая число 2546372, наши комбинации… ну вы поняли.

Для всех решений нам нужна карта цифр в символы. Есть несколько способов представить это, и наиболее кратким является вариант в 1 строку, но я выбрал удобочитаемость в приведенных ниже решениях.

А также, вот фотография клавиатуры телефона, для вас, молодежь:

Решение №1: Тройной цикл

Я знаю, я знаю, концепция тройной петли заставляет вас корчиться и чувствовать себя некомфортно. Однако это, по крайней мере, только тройной цикл для небольших наборов данных.

Это решение работает таким образом, чтобы сначала перебирать цифры, предоставленные функции. Затем для каждой цифры мы перебираем возможности, найденные в предыдущей цифре. Наконец, мы перебираем символы, доступные для текущей цифры.

Эта серия циклов позволяет нам добавлять все доступные комбинации для каждой цифры, принимая во внимание комбинации для предыдущих цифр, и почти точно так же, как вы могли бы обработать вопрос как человек.

Решение № 2: Рекурсия

Это решение не сильно отличается от решения с тройным циклом, рассмотренного выше, но его может быть немного легче читать, если вы хорошо разбираетесь в рекурсивных функциях.

Что мы делаем, так это берем переданные цифры, находим все возможные комбинации для первой цифры, а затем снова вызываем функцию для оставшихся цифр. Каждый раз мы передаем все комбинации, найденные до сих пор, что означает, что к концу у нас будет массив всех возможных комбинаций.