gpt4 book ai didi

ruby - 替换不保存在矩阵中

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:16:54 26 4
gpt4 key购买 nike

我试图通过逐行转置和旋转元素来将矩阵旋转 90 度,但转置部分(第一个 i,j 循环)没有被保存。

def rotate(matrix)

size = matrix.length

for i in 0..size-1
for j in 0..size-1
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
end
end

if size.even?
for i in 0..size-1
for j in 0..(size-1)/2
matrix[i][j], matrix[i][size-1-j] = matrix[i][size-1-j], matrix[i][j]
end
end

else
for i in 0..size-1
for j in 0..((size-1)/2 + 1)
matrix[i][j], matrix[i][size-1-j] = matrix[i][size-1-j], matrix[i][j]
end
end
end
matrix
end

有人对此有任何解释吗?

最佳答案

代码没有执行任何操作的原因是因为您正在交换每对元素,然后再将它们交换回来。

对于每对 i,j 如果 i 和 j 相同则交换不会做任何事情,如果它们不同则该对将遇到两次,一次是当 i 大于 j 时,一次是当 j 大于比我。例如,当 i = 2 和 j = 3 时,matrix[2][3] 将与 matrix[3][2] 交换,但稍后当 i = 3 和 j = 2 时,它们将再次交换回来。

您可以通过简单的比较测试解决问题:

for i in 0..size-1
for j in 0..size-1
if i < j
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
end
end

关于ruby - 替换不保存在矩阵中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43838199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com