Подсчет способов разбиения числа на возрастающие последовательности цифр

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

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

Примеры:

Input: S = “1345”
Output: 5
Explanation: Possible partitions are as follows: 

  1. [1345]
  2. [13, 45], [1, 345]
  3. [1, 3, 45]
  4. [1, 3, 4, 5]

Input: S = “12”
Output: 2

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

  • Инициализируйте целочисленную переменную, скажем, count как 0 , чтобы хранить количество способов разбить строку на возрастающие подмножества.
  • Объявите функцию print() с индексом (с сохранением текущей позиции), строкой S (данная строка в вопросе) и строкой ans ( в качестве параметров.
  • Теперь необходимо рассмотреть следующие два случая:
    • Если S[index] вставляется в предыдущее число, добавьте S[index] в конце ans и вызовите функцию print() с параметрами index + 1 , S и ans .
    • Если S[index] не является частью предыдущего числа, добавьте " " (пробел) в конце ans , а затем вставьте S[index] и вызовите функцию print() с параметрами index + 1 , S , ans .
  • Если index = S.length() , то проверьте, расположены ли цифры в сформированных последовательностях в порядке возрастания или нет. Если сформированные последовательности увеличиваются, увеличьте количество на 1 .
  • Выведите count в качестве ответа после выполнения вышеуказанных шагов.

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

Временная сложность: O(N*2 N ), где N — длина строки S.
Вспомогательное пространство: O(1)

РЕКОМЕНДУЕМЫЕ СТАТЬИ