19

LeetCode День 5 Letter Combinations of a Phone Number [Medium]

По опыту прошлых задачек стало ясно, что надо бы подтянуть общие знания по ядру Python, для чего было решено купить что-нибудь из питоновской классики. Выбор пал на Лутца:

LeetCode День 5 Letter Combinations of a Phone Number [Medium] Python, Программирование, Обучение, ChatGPT, Программист, Длиннопост

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

LeetCode День 5 Letter Combinations of a Phone Number [Medium] Python, Программирование, Обучение, ChatGPT, Программист, Длиннопост

Суть задачки достаточно проста: по заданному набору цифр надо вернуть все возможные комбинации букв, соответсвующие этим цифрам. Из сложностей: нам заранее не известно количество цифр, и каждой цифре у нас может соответствовать разное количество букв( 3 или 4).

Для начала определим словарь, который будет задавать соответствие между символом цифры(ага цифры нам подают в виде строки), и пустую переменную результата. А дальше зададим цикл, который будет перебирать цифры по одной и записывать результат. Фокус в том, что на первой итерации цикла результат будет определен, как список из букв соответствующей первой цифре, а дальше разберем на примере:

digits = "23"

Значит на первой итерации цикла в результат запишем только буквы, соответствующие цифре 2 - это ["a","b","c"], затем срезом просто отбросим первую цифру.

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

LeetCode День 5 Letter Combinations of a Phone Number [Medium] Python, Программирование, Обучение, ChatGPT, Программист, Длиннопост

На третьем(если он конечно есть) взять текущий результат, вторую цифру и записать все комбинации текущего результата и букв соответствующих третьей цифре, затем отбросить третью цифру.

И так до тех пор, пока цифра не закончатся...

Собственно и получился цикл, где мы перебираем цифры. А внутри на первой итерации(когда переменная результата пуста) задаем результат через генератор с единственным циклом, а когда не пуста задаем генератор с двумя циклами: один по текущим значениям результата, второй по буквам, соответствующим текущему значению цифры по словарю.

LeetCode День 5 Letter Combinations of a Phone Number [Medium] Python, Программирование, Обучение, ChatGPT, Программист, Длиннопост

Результат получился быстрым и элегантным, самому понравилось.

А решение от главного конкурента оказалось слабее, по крайней мере первое рабочее решение:

LeetCode День 5 Letter Combinations of a Phone Number [Medium] Python, Программирование, Обучение, ChatGPT, Программист, Длиннопост
LeetCode День 5 Letter Combinations of a Phone Number [Medium] Python, Программирование, Обучение, ChatGPT, Программист, Длиннопост

Программирование на python

879 постов11.9K подписчика

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу