我正在解决金字塔问题,在该问题中,通过在每次迭代中减去两个连续的数字,将数组随时间缩减为单个元素。
输入:[1、5、9、2、3、5、6]
迭代
[4,4,-7,1,2,1],
[0,-11,8,1,-1],
[-11,19,-7,-2],
[30,-26,5],
[-56,31],
[87]
输出:87
解决此问题的最佳方法是什么?这可以通过继承数组并创建一个新类来完成,但我不知道如何做。请帮忙。我写这段代码来解决它:
a = [1,5,9,2,3,5,6]
class Array
def pyr
a = self.each_cons(2).to_a.map! { |e| e[1] - e[0] }
a
end
end
while a.length > 1
a = a.pyr
ans = a[0]
end
p ans
我看到三种解决方法。
当然,如果在您的特定ruby脚本/项目中这是数组的基本功能,请重新打开该类。但是,如果您要重新打开课程,至少要确保该名称有意义。pyr
?为什么不写全名,以免发生冲突,例如next_pyramid_iteration
(我从来没有听说过这个金字塔问题,所以请问我是不是这里的基地)。
class Pyramid < Array
def next_iteration
self.each_const(2).map! { |e| e[1] - e[o] }
end
end
然后您的计算将变为
pyramid = Pyramid.new([1,5,9,2,3,5,6])
while pyramid.length > 1
pyramid.next_iteration
end
pyramid[0]
我不太确定您要达到什么目标,但是为什么不只做一个知道如何计算金字塔的特定班级呢?
class PyramidCalculator
def initialize(arr)
@pyramid = arr
end
def calculate
while @pyramid.length > 1
do_next_iteration
end
@pyramid.first
end
def self.calculate(arr)
PyramidCalculator.new(arr).calculate
end
protected
def do_next_iteration
@pyramid = @pyramid.each_const(2).map! { |e| e[1] - e[o] }
end
end
因为我添加了便利类方法,所以现在可以计算出如下结果:
PyramidCalculator.calculate([1,5,9,2,3,5,6])
我个人的偏爱将是最后的选择:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句