替换不会保存在矩阵中

时间:2017-05-08 00:39:04

标签: ruby algorithm matrix transpose substitution

我试图通过逐行移调和旋转元素来将矩阵旋转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

有人会对此有任何解释吗?

1 个答案:

答案 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