Количество уникальных подпоследовательностей из заданного числа, которые являются степенью 2
Опубликовано: 22 Сентября, 2022
Для заданной строки S размера N , содержащей цифры в диапазоне [0-9] , задача состоит в том, чтобы напечатать количество всех уникальных подпоследовательностей строки, которые являются степенью числа 2 .
Примеры:
Input: S = “1216389”
Output: 5
Explanation:
All the possible unique subsequences that are power of 2 are: {1, 2, 16, 128, 8}Input: S = “12”
Output: 2
Explanation:
All the possible unique subsequences that are power of 2 are: {1, 2}.
Подход: проблему можно решить, сгенерировав все подпоследовательности строки S , а затем проверив, является ли число степенью двойки или нет. Выполните следующие шаги, чтобы решить проблему:
- Инициализируйте набор, скажем, allUniqueSubSeq для хранения подпоследовательности, которая является степенью числа 2 .
- Определите рекурсивную функцию, скажем, uniqueSubSeq(S, ans, index) и выполните следующие шаги:
- Базовый случай: если индекс равен N, то если (int)ans является степенью числа 2, то вставьте ans в набор allUniqueSubSeq .
- В противном случае возможны два случая:
- Если S[index] добавляется в строку ans , вызовите функцию uniqueSubSeq с параметрами S , ans + S[index] и index+1.
- Если S[index] не добавляется в строку ans , то вызовите функцию uniqueSubSeq с параметрами S , ans и index + 1 .
- Наконец, после выполнения вышеуказанных шагов вызовите функцию uniqueSubSeq(S, "", 0), а затем напечатайте allUniqueSubSeq.size() в качестве ответа.
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(2 N )
Вспомогательное пространство: O(2 N )