LeetCode День 5 Letter Combinations of a Phone Number [Medium]
По опыту прошлых задачек стало ясно, что надо бы подтянуть общие знания по ядру Python, для чего было решено купить что-нибудь из питоновской классики. Выбор пал на Лутца:
Читать его как художественную литературу практически невозможно. Я конечно, только начал осваивать книги, но даже с подготовкой и небольшой практикой, все что читаешь надо тут же идти и проверять на задачах. В общем то изученный раздел с генераторами помог решить следующую задачку уверенно:
Суть задачки достаточно проста: по заданному набору цифр надо вернуть все возможные комбинации букв, соответсвующие этим цифрам. Из сложностей: нам заранее не известно количество цифр, и каждой цифре у нас может соответствовать разное количество букв( 3 или 4).
Для начала определим словарь, который будет задавать соответствие между символом цифры(ага цифры нам подают в виде строки), и пустую переменную результата. А дальше зададим цикл, который будет перебирать цифры по одной и записывать результат. Фокус в том, что на первой итерации цикла результат будет определен, как список из букв соответствующей первой цифре, а дальше разберем на примере:
digits = "23"
Значит на первой итерации цикла в результат запишем только буквы, соответствующие цифре 2 - это ["a","b","c"], затем срезом просто отбросим первую цифру.
На втором(и последующих) итерациях цикла нам нужно взять текущий результат, вторую цифру и записать все комбинации текущего результата и букв соответствующих второй цифре, затем отбросить вторую цифру.
На третьем(если он конечно есть) взять текущий результат, вторую цифру и записать все комбинации текущего результата и букв соответствующих третьей цифре, затем отбросить третью цифру.
И так до тех пор, пока цифра не закончатся...
Собственно и получился цикл, где мы перебираем цифры. А внутри на первой итерации(когда переменная результата пуста) задаем результат через генератор с единственным циклом, а когда не пуста задаем генератор с двумя циклами: один по текущим значениям результата, второй по буквам, соответствующим текущему значению цифры по словарю.
Результат получился быстрым и элегантным, самому понравилось.
А решение от главного конкурента оказалось слабее, по крайней мере первое рабочее решение:
Программирование на python
879 постов11.9K подписчика
Правила сообщества
Публиковать могут пользователи с любым рейтингом. Однако!
Приветствуется:
• уважение к читателям и авторам
• конструктивность комментариев
• простота и информативность повествования
• тег python2 или python3, если актуально
• код публиковать в виде цитаты, либо ссылкой на специализированный сайт
Не рекомендуется:
• допускать оскорбления и провокации
• распространять вредоносное ПО
• просить решить вашу полноценную задачу за вас
• нарушать правила Пикабу