python - 总和可被 k 整除的子序列数

标签 python algorithm recursion dynamic-programming

我刚刚为一家公司做了一个编码挑战,无法解决这个问题。问题陈述如下:

给定一个整数数组,找出数组中总和可被 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)

这种递归方法有什么问题,我该如何纠正它?我对迭代解决方案不感兴趣,我只是想知道为什么这个递归解决方案是错误的以及我该如何纠正它。

最佳答案

你确定那不是案例测试?例如:

[4, 1, 3, 2], k = 3

4+2 = 6, 1+2=3, 3, 1+2+3=6, 4+2+3 = 9

所以,您的功能是正确的(它给了我 5),而且我没有发现您的功能存在重大问题。

关于python - 总和可被 k 整除的子序列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54048132/

相关文章:

java - 如何避免无限递归方法中的堆栈溢出错误?

php - 当添加到列表的对象相同时,是否可以避免在 php 中重复调用方法?

javascript - 创建 DOM 树的函数中的递归

python - pandas:如何通过比较其他列值来修改数据框中的列中的值

python - 即使顺序不同,如何检查字符串中的单词 - PYTHON

algorithm - 给定起点和终点控制点、曲线长度和张力位置,确定二次贝塞尔曲线控制点

algorithm - 匈牙利算法 : finding minimum number of lines to cover zeroes?

Python Pandas 从宽到长格式更改,列标题拆分

python - 即使文件位于同一文件夹(文本文件)中,程序也无法找到文件

c - 如何在 C 语言中分隔括号之间的术语并列出它们