Максимальное количество N с использованием цифр M, таких что 2 и 5, а также 6 и 9 можно рассматривать как одно и то же соответственно.

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

Учитывая целое число N и целую строку M , задача состоит в том, чтобы найти общее количество, необходимое для получения N , используя цифры строки M. Кроме того, цифру 2 можно рассматривать как цифру 5 , а цифру 6 можно рассматривать как цифру 9 и наоборот, и каждая цифра из строки M может использоваться не более одного раза.

Примеры:

Input: N = 6, M = “245769”
Output: 2
Explanation: Digits 5 and 6 are used to form the number 56. iop[The digits 2 and 9 are used to form the number 56. As 2 is treated as 5 and 9 is treated as 6.

Input: N = 25, M = “55”
Output: 1

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

  • Создайте пустую хэш-карту, скажем, карту для хранения частоты цифр данной строки M .
  • Создайте переменную, скажем, len для хранения длины строки.
  • Пройдите заданную строку S , используя переменную i и повторяйте до тех пор, пока значение i не станет меньше, чем len , и выполните следующие шаги:
    • Если символ S[i] равен '5' , то измените его на '2' .
    • Если символ S[i] равен '9' , то измените его на '6'.
    • Если символ присутствует в mymap , измените частоту как mymap.put(x, map.get(x)+1).
    • В противном случае вставьте символ в карту с частотой 1 как mymap.put(x, 1) .
    • После добавления частоты к карте увеличьте i и перейдите к следующей итерации.
  • Создайте пустую хэш-карту, скажем, rems для хранения цифр числа N.
  • Повторяйте, пока значение N не станет больше 0, и выполните следующие шаги:
    • Создайте переменную, скажем, rem , чтобы сохранить последнюю цифру N , используя оператор модуля как N%10 .
    • Если rem равно 5 , то измените его на 2 .
    • Если rem равно 9 , измените его на 6 .
    • Если rem присутствует в карте rems , то увеличьте частоту на 1 as rems.put(rem, rems.get(rem)+1) .
    • В противном случае вставьте его в карту rems как rems.put(rem, 1) .
    • Разделите N на 10.
  • Создайте переменную, скажем, cnt , чтобы хранить максимальное число N , которое может быть сформировано с использованием заданных цифр строки M.
  • Пройдите через карту rems и выполните следующие шаги:
    • Пусть каждый объект на карте есть ele.
    • Проверьте, присутствует ли ключ от ele в частотной карте строки mymap .
    • Если нет, возвращается 0 (Число N не может быть сформировано, если цифра из N отсутствует в строке M).
    • Рассчитайте количество , разделив частоту ключа в mymap на частоту в карте rems как mymap.get(key)/ele.getValue() .
    • Обновите минимальное значение из всех итераций в cnt .
  • После выполнения вышеуказанных шагов выведите в качестве результата значение cnt .

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

Временная сложность: O(N)
Вспомогательное пространство: O(1)