Подсчитайте числа в заданном диапазоне, которые симметричны при повороте на 180 градусов по часовой стрелке.
Учитывая диапазон [L, R), задача состоит в том, чтобы подсчитать числа, которые остаются неизменными при повороте на 180 градусов по часовой стрелке.
Примеры:
Input: L = 0, R =10
Output: 3
Explanation: Here between 0 and 10 ( 10 exclusive) the desired numbers are: 0, 1, and 8.
Notice 6 and 9 are not included because, when 6 is rotated 180 degree it’s value changes to 9.
Same happens for 9, its value changes to 6. So the answer is 3.Input: L = 0, R =100
Output: 7
Explanation: The numbers are 0, 1, 8, 11, 69, 88, 96.
These numbers when rotated 180 degrees, their values remain unchanged.
Подход: Этот подход основан на реализации. Используйте функцию, чтобы проверить, является ли число числом вверх или нет, и перебрать диапазон и вычислить общее количество чисел, удовлетворяющих заданному условию.
- Инициализируйте переменную «результат» с помощью 0 .
- Сначала выполните итерацию по диапазону [L, R) .
- Держите словарь, в котором есть все однозначные числа, которые образуют допустимое число при повороте на 180 градусов (например, 6 становится 9).
- На каждой итерации проверяем, удовлетворяет ли число заданному условию задачи:
- Проверить, есть ли цифры числа в словаре или нет.
- Если нет , верните False .
- Если он является частью словаря, проверьте, совпадает ли его противоположный индексированный элемент или нет.
- Если нет , верните False .
- Если все совпадает, верните true.
- Если да, то увеличьте переменную «результат» на 1 .
Ниже приведена реализация описанного выше подхода.
Временная сложность: O((R – L)*d), где d – максимальное количество цифр в числе в диапазоне [L, R)
Вспомогательное пространство: O(1)
Использование maketras() и translate(): Накладные расходы с вышеуказанным методом заключаются в том, что мы должны написать метод, который выполняет итерацию по числам и проверяет один за другим, что они одинаковы при повороте на 180 градусов. В Python некоторые методы упрощают кодирование этого перехода. В этом подходе используйте функции maketras() и translate() строки, которые облегчают работу.
- Установите s1 всех однозначных чисел, которые дают другое действительное число при повороте на 180 градусов.
- Имейте подготовленную таблицу переходов с подходящим номером для ее замены.
- Итерация по диапазону [L, R) .
- На каждой итерации преобразуйте число в набор символов.
- Проверьте, является ли набор подмножеством s1 или нет.
- Если это не так, продолжайте итерацию.
- Если это подмножество s1 , то:
- Переведите все числа с помощью таблицы переходов .
- Затем сопоставьте его с предыдущим номером .
- Если не совпадает, продолжаем итерацию .
- если совпадения, то увеличьте количество на 1 .
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O((R – L)*d), где d – максимальное количество цифр в числе в диапазоне [L, R)
Вспомогательное пространство: O(1)