Я только что выполнил задачу по кодированию для компании и не смог решить эту проблему. Постановка проблемы выглядит так:
Учитывая массив целых чисел, найдите количество подпоследовательностей в массиве, сумма которого делится на k, где k - некоторое положительное целое число.
Например, для [4, 1, 3, 2]
и k = 3
решение равно 5. [[3], [1, 2], [4,3,2], [4,2], [1,3,2]]
- это подпоследовательности, сумма которых делится на k
, то есть current_sum + nums[i] % k == 0
, где nums[i]
- текущий элемент в массив.
Я пытался решить эту проблему рекурсивно, однако я не смог пройти ни одного теста. Мой рекурсивный код был примерно таким:
def kSum(nums, k):
def kSum(cur_sum, i):
if i == len(nums): return 0
sol = 1 if (cur_sum + nums[i]) % k == 0 else 0
return sol + kSum(cur_sum, i+1) + kSum(cur_sum + nums[i], i+1)
return kSum(0, 0)
Что не так с этим рекурсивным подходом и как я могу его исправить? Меня не интересует итеративное решение, я просто хочу знать, почему это рекурсивное решение неверно и как я могу его исправить.