LeetCode - 48. Rotate Image 将正方形矩阵旋转 90 度
题意
解析
- 这个也是一个宏观的调度问题,还是使用分圈的处理方式,每次对一个矩阵的外围进行处理(边界) 跑;
- 我们发现只要替换四个数,替换
n-1
次,就把外面的边界替换好了,然后我们缩小范围(左上角的(ar,ac)
和右下角的(br,bc)
分别减一),就可以完成操作,如下图;
代码如下:
class Solution {
public void rotate(int[][] matrix) {
int ar = 0;
int ac = 0;
int br = matrix.length - 1;
int bc = matrix[0].length - 1;
while (ar <= br && ac <= bc) {
rotateEdge(matrix, ar++, ac++, br--, bc--);
}
}
//具体的分圈的交换旋转
private void rotateEdge(int[][] matrix, int ar, int ac, int br, int bc) {
int times = bc - ac;
int tmp = 0;
for (int i = 0; i < times; i++) {// times - 1 次 每次交换四个点的值
tmp = matrix[ar][ac + i];
matrix[ar][ac + i] = matrix[br - i][ac];
matrix[br - i][ac] = matrix[br][bc - i];
matrix[br][bc - i] = matrix[ar + i][bc];
matrix[ar + i][bc] = tmp;
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论