矩阵旋转 java_在Java中旋转NxN矩阵

本文详细介绍了如何在Java中实现一个顺时针旋转正方形矩阵的算法。通过外部和内部循环,逐层旋转矩阵的外壳,最终完成整个矩阵的旋转。示例展示了旋转过程,从初始矩阵ABCD...到最终的MIEA...。
摘要由CSDN通过智能技术生成

概观

考虑一个样本矩阵可能如下所示:

ABCD

EFGH

IJKL

MNOP

为了我的解释,ABCD被认为是行0,EFGH是第1行,依此类推。行0的第一个像素是A.

另外,当我谈到外壳时,我指的是:

ABCD

E H

I L

MNOP

首先我们来看看移动值的代码。

int top = matrix[first][i]; // save top

第一行将值缓存在顶部位置。这是指由[first] [i]确定的矩阵的顶行上的位置。例如:保存A.

// left -> top

matrix[first][i] = matrix[last-offset][first];

下一部分将值从左侧位置移动到顶部位置。例如:把M放在A的位置。

// bottom -> left

matrix[last-offset][first] = matrix[last][last - offset];

下一部分将值从底部位置移动到左侧位置。例如:拿P并把它放在M的地方。

// right -> bottom

matrix[last][last - offset] = matrix[i][last];

下一个部分将值从正确位置移动到底部位置。例如:拿D并把它放在P所在的位置。

// top -> right

matrix[i][last] = top; // right

最后一部分将缓存中的值(顶部位置)移动到正确的位置。例如:把A从D的第一步。

接下来的循环。

外部循环从行0到总行数的一半。这是因为当您旋转第0行时,它也会旋转最后一行,当您旋转第1行时,它也会旋转第二行到最后一行,依此类推。

内循环从行中的第一个像素位置(或列)运行到最后一个。请记住,对于行0,这是从像素0到最后一个像素,但对于行1,这是从像素1到第二个到最后一个像素,因为第一个和最后一个像素作为行0的一部分旋转。

所以外圈的第一次迭代使得外壳旋转。换一种说法:

ABCD

EFGH

IJKL

MNOP

变为:

MIEA

NFGB

OJKC

PLHD

看看外壳是如何顺时针旋转的,但内芯没有移动。

然后外循环的第二次迭代导致第二行旋转(不包括第一个和最后一个像素),我们最终得到:

MIEA

NJFB

OKGC

PLHD

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值