【发布时间】:2019-11-30 17:11:10
【问题描述】:
我又在做 CodeWars 挑战,今天我遇到了这个问题:
让我们考虑这个例子(以一般格式编写的数组):
ls = [0, 1, 3, 6, 10]
它的以下部分:
ls = [0, 1, 3, 6, 10]
ls = [1, 3, 6, 10]
ls = [3, 6, 10]
ls = [6, 10]
ls = [10]
ls = []
相应的总和是(放在一个列表中):[20, 20, 19, 16, 10, 0]
函数parts_sums(或它在其他语言中的变体)将把一个列表ls作为参数,并返回一个如上定义的其部分总和的列表。
object SumsOfParts {
def partsSums(l: List[Int]): List[Int] = {
var x: List[Int] = List()
if (l.isEmpty)
x
else {
x :+ l.sum
partsSums(l.tail)
}
}
}
这里是测试样本:
partsSums(List(0, 1, 3, 6, 10)) 应该返回 List(20, 20, 19, 16, 10, 0) 测试失败
空列表的尾部 堆栈跟踪 4ms完成 partsSums(List(1, 2, 3, 4, 5, 6)) 应该返回 List(21, 20, 18, 15, 11, 6, 0) 测试失败
空列表的尾部 堆栈跟踪 Partssums(列表(744125,935,407,454,430,40,144,671213,889,810,2579358)应返回列表(10037855,929330,9292795,929388,9291934,9291504,9291414,9291270,2581057,2580168 , 2579358, 0) 测试失败
空列表的尾部 堆栈跟踪 1ms内完成 Partssums(列表(30350,76431,156228,78043,98977,80169,32457,17508,57971,17508,57971,171907)应该返回列表(1145239,1114889,1038458,882230,804187,705210,625041,592584,409709 , 247386, 229878, 171907, 0) 测试失败
【问题讨论】:
-
1) 请修复缩进:它发生了什么? 2)
ls.scanRight(0)(_ + _). -
也许
ls.tails.map(_.sum)?不过,该解决方案不会是最高效的。 -
抱歉缩进,但编译器在问题开始时将列表误认为是代码,因此是输出。我修复了一些位,现在应该会更好。
-
在运行到 SO 之前你真的应该做一些简单的调试。每次迭代都会创建一个新的空
x,这就是为什么它总是返回一个空List。 -
为什么要递归? CodeWars 是否关心它是否是递归的?
标签: scala list recursion functional-programming int