我认为我对这个codewars挑战有一个非常酷的解决方案,但我没有通过最后一次测试,因为它在我的数组的开头添加了额外的1,我不知道为什么!在IRB中,我的代码似乎工作正常。
@arr = []
def snail(array)
array.to_a.empty? ? (return @arr.flatten) : @arr << array.shift
snail(array.transpose.reverse)
end
当snail([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
期待[1, 2, 3, 6, 9, 8, 7, 4, 5]
但[1, 1, 2, 3, 6, 9, 8, 7, 4, 5]
答案 0 :(得分:1)
这里的问题是@arr
在测试之间没有被清除。因此,据推测,失败之前的测试类似于snail([[1]])
,这会使@arr = [[1]]
(在展平时,会在前面添加额外的1
。
解决方案是在完成特定测试用例时清除@arr
,如下所示:
@arr = []
def snail(array)
if array.to_a.empty?
output = @arr.flatten
@arr = []
return output
else
@arr << array.shift
end
snail(array.transpose.reverse)
end
答案 1 :(得分:1)
def snail(array)
head, *tail = array
head ? head + snail(tail.transpose.reverse) : []
end
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
snail(arr) #=> [1, 2, 3, 6, 9, 8, 7, 4, 5]