Подсчитайте числа в заданном диапазоне, которые симметричны при повороте на 180 градусов по часовой стрелке.

Опубликовано: 19 Сентября, 2022

Учитывая диапазон [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() строки, которые облегчают работу.

  1. Установите s1 всех однозначных чисел, которые дают другое действительное число при повороте на 180 градусов.
  2. Имейте подготовленную таблицу переходов с подходящим номером для ее замены.
  3. Итерация по диапазону [L, R) .
  4. На каждой итерации преобразуйте число в набор символов.
  5. Проверьте, является ли набор подмножеством s1 или нет.
  6. Если это не так, продолжайте итерацию.
  7. Если это подмножество s1 , то:
    1. Переведите все числа с помощью таблицы переходов .
    2. Затем сопоставьте его с предыдущим номером .
    3. Если не совпадает, продолжаем итерацию .
    4. если совпадения, то увеличьте количество на 1 .

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O((R – L)*d), где d – максимальное количество цифр в числе в диапазоне [L, R)
Вспомогательное пространство: O(1)