我的方法应该采用一组子数组,找到第一个数组的第一个值的总和,第二个数组的第二个值,第三个数组的第三个值,依此类推。输入和预期结果的一些示例如下:
exampleArray = [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
]
diagonalSum(exampleArray) # => 4
exampleArray = [
[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 1]
]
diagonalSum(exampleArray) # => 5
我写了这个:
def diagonalSum(matrix)
total = 0
counter = 0
while matrix.length <= counter + 1 do
total += matrix[counter][counter]
counter += 1
end
total
end
然后返回0
。
答案 0 :(得分:0)
最简单的方法是将数组转换为矩阵并应用Matrix#trace。
require 'matrix'
arr = [[1, 0, 0, 7],
[0, 2, 0, 0],
[0, 0, 3, 0],
[8, 0, 0, 4]]
Matrix[*arr].trace
#=> 10
答案 1 :(得分:0)
根据你提供的代码,其中输入是一个数组数组,我可以给你的第一个建议是,在Ruby中你必须避免使用for/while
循环并使用迭代器,如{{ 1}}代替(基于此Ruby style guide以及@tadman和@Yu Hao的建议)。
each with index迭代器使用当前迭代数组及其索引位置的Ruby块,因此您不需要定义自己的索引变量并在每次迭代中更新它。
将此代码应用于您的代码将产生以下结果:
each/each_with_index
另请注意,Ruby中的约定是在snake_case中编写变量和方法名称(根据以前的样式指南)。