我试图通过逐行移调和旋转元素来将矩阵旋转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
有人会对此有任何解释吗?
答案 0 :(得分:0)
代码不执行任何操作的原因是因为您正在交换每对元素然后将它们交换回来。
对于每一对i,j如果i和j相同则交换不做任何事情,如果它们不同则会遇到两次,一次当i大于j而一次当j大于j时比我。例如,当i = 2且j = 3时,矩阵[2] [3]将与矩阵[3] [2]交换,但稍后当i = 3且j = 2时,它们将再次交换回来。 / p>
您可以通过简单的比较测试来解决问题:
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