algorithm - 显示方程 x1+x2+...+xk = n 的所有正解

标签 algorithm combinations

下面是显示方程 x1+x2+...+xk = n 的所有正解的程序,其中 k 和 n 是正整数:

func solution(k: Int, n: Int) {
    if k > n || k <= 0 {
        print("No solution")
    } else 
        if k==1 {
            print(n)
        } else {
            for i in 1...(n-k+1) {
                print(i, terminator:"")

                solution(k-1, n: n-i)
                print("")
            }
        }
}
solution(4, n: 4)

此程序在 n = 4 和 k = 1,2,4 时运行良好,但在 k = 3 时显示不正确。有人可以帮助找出错误吗?

最佳答案

问题是对于 n = 4 和情况 k = 1、2、4,每个 i 只有一个解决方案,因此您的 print(i, terminator:"") 可以正常工作。

但是,对于 k = 3 的情况,例如,在 k = 3 处打印 1 之后,因此有不止一个正确的情况:(1 , 2, 1)( 1, 1, 2),这意味着在 k = 1 处只有一个命令 print(1, terminator:"") 是不够的。

图像打印例程将像这样:

at k = 3, i = 1, print 1

at k = 2, i = 1, print 1

at k = 1, i = 2, print 2

So, at this time, we have (1, 1, 2), looks good.

However, when we backtrack to k = 2, i = 2, print 2

at k = 1, i = 1, print 1,

So, we only have (2, 1), which is not correct.

解决这个问题的一个简单方法是不要在每个递归步骤都打印,您只需将所有结果存储在一个数组中,并在 k 达到 0 时打印该数组

关于algorithm - 显示方程 x1+x2+...+xk = n 的所有正解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34129987/

相关文章:

algorithm - 修改后的二十一点让电脑赢多于输

python - 可以加快查找字符串邻域的代码吗?

algorithm - 在六角形网格上可以找到多少条长度为n且起点和终点相同的路径?

php - 代码处理时间太长,内存占用大

计算未排序数据中唯一对和非唯一对实例的数量

c - 查找组合数 nCr,时间复杂度为 O(1)

python - 集合元素的组合

R 项目组合 3 组

c# - 从 M 集合中取出 n 个唯一对象

java - 枚举集合的无序对(2-组合)