Подсчитать все простые числа, которые можно составить из цифр данного числа

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

Для заданной строки S , состоящей из N цифр, задача состоит в том, чтобы найти количество различных простых чисел, которые можно составить из цифр строки S.

Примеры:

Input: S = “123”
Output: 5
Explanation:
The prime numbers that can be formed from the digits of the string S is 2, 3, 13, 23, and 31. Hence, the total count is 5.

Input: S = “1”
Output: 0

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

  • Инициализируйте HashSet H для хранения уникальных возможных строк простых чисел.
  • Определите функцию проверки (строковый номер) , чтобы проверить, является ли число простым или нет, и выполните следующие шаги:
    • Если длина строки number[] равна 0 , верните false .
    • Используйте функцию обрезки чтобы обрезать номер.
    • Инициализируйте длинную переменную num и сохраните в ней проанализированное число с помощью функции parseLong.
    • Если num равно 1, вернуть false .
    • Если num%2 равно 0 , а num не равно 2 , верните false .
    • Если num%3 равно 0 , а num не равно 3 , верните false .
    • Переберите диапазон [6, число 1/2 ], используя переменную i , и выполните следующие шаги:
      • Если одно из значений num%(i-1) или num%(i+1) равно 0 , верните false .
    • В конце верните true .
  • Определите функцию DFS(int arr[], string ans) для поиска всех возможных простых чисел и выполните следующие шаги:
    • Вызовите функцию check(ans) и , если функция возвращает true , добавьте эту строку в HashSet H .
    • Переберите диапазон [0, 10], используя переменную i , и выполните следующие шаги:
      • Если arr[i] равно 0, то продолжаем итерацию.
      • Добавьте значение i к строковому ответу и уменьшите значение arr[i] на 1 .
      • Вызовите функцию DFS(arr, ans), чтобы найти другие возможные ответы с возвратом.
      • Удалите значение i из строкового ответа и добавьте значение arr[i] на 1 .
  • Инициализируйте массив count[] размером 10 , чтобы сохранить частоту каждого числа в строке S .
  • Переберите диапазон [0, N], используя переменную i , и выполните следующие шаги:
    • Добавьте частоту на 1 к массиву count[] символа в i индексе в строке S .
  • Вызовите функцию DFS(count, "") , чтобы найти все возможные простые числа.
  • После выполнения вышеуказанных шагов выведите размер HashSet H в качестве ответа.

Ниже приведена реализация описанного выше подхода.

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