我正在尝试按螺旋顺序(顺时针)打印数组,但我的代码打印不正确。
我的数组是:
a = [
[2, 4, 6, 8],
[5, 9, 12, 16],
[2, 11, 5, 9],
[3, 2, 1, 8]
]
我的解决方案:
def print_circ(arr, row, col)
t = 0
b = row - 1
l = 0
r = col - 1
dir = 0
while t <= b and l <= r do
if dir == 0
for i in l..r
puts arr[t][i]
end
t += 1
end
if dir == 1
for i in t..b
puts arr[i][r]
end
r -= 1
end
if dir == 2
for i in r..l
puts arr[b][i]
end
b -= 1
end
if dir == 3
for i in b..t
puts arr[i][l]
end
l += 1
end
dir = (dir+1)%4
end
end
当我运行它时,它不会打印出底部或左侧边缘:
2
4
6
8
16
9
8
9
12
5
11
任何人都可以帮助我了解我的代码有什么问题吗?
最佳答案
您代码中的错误位于 r..l
和 b..t
,其中 r
大于 l
,并且 b
大于 t
。当您定义从较高整数到较低整数的范围时,该范围实际上是空的。例如:
irb> (0..3).to_a
=> [0, 1, 2, 3]
irb> (3..0).to_a
=> []
要修复向后迭代代码,您可以将 for i in r..l
循环更改为 (l..r).reverse_each do |i| ...结束
。
关于arrays - 按螺旋顺序打印矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46696795/