leetcode|被一道美团面试题转晕
今天为大家讲解 LeetCode 第 48 题,是一道中等难度的题目。曾有读者面试美团被问到过,来搞一波~
题目描述
给定一个 n × n 的二维矩阵表示一个图像。
将图像顺时针旋转 90 度。
说明:
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
示例 1:
给定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
示例 2:给定 matrix =
[
[ 5, 1, 9,11],
[ 2, 4, 8,10],
[13, 3, 6, 7],
[15,14,12,16]
],原地旋转输入矩阵,使其变为:
[
[15,13, 2, 5],
[14, 3, 4, 1],
[12, 6, 8, 9],
[16, 7,10,11]
]来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-image
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
这道题有点难度,我之前也没怎么了解,这旋转真是把我转晕了,看的别人的题解慢慢想想画画的亏弄懂了。
这里借用下@读书就是赚钱 ?的现成图,我就不画了,如侵必删。


理解了思路但是写代码还是很多细节容易出错,不清楚的可以debug调试看看
//go
func rotate(matrix [][]int) {
length := len(matrix[0])
var tmp int
for start,end := 0, length-1; start < end; { //层的控制
for s, e := start, end; s < end; { //某一层的四个点的旋转
tmp = matrix[start][s] //记录左上
matrix[start][s] = matrix[e][start] //左上=左下
matrix[e][start] = matrix[end][e] //左下=右下
matrix[end][e] = matrix[s][end] //右下=右上
matrix[s][end] = tmp //右上=左上
s++
e--
}
start++
end--
}
}
//java
class Solution {
public void rotate(int[][] matrix) {
int temp=-1;
for(int start=0,end=matrix[0].length-1;start for(int s=start,e=end;s temp=matrix[start][s];
matrix[start][s]=matrix[e][start];
matrix[e][start]=matrix[end][e];
matrix[end][e]=matrix[s][end];
matrix[s][end]=temp;
};
};
}
}
另外还有个思路:向右旋转90°,可以理解为先上下翻转,再沿对角线翻转(或者先沿对角线翻转,再左右翻转)

这个代码就不给出,留给大家当个练习吧?
郑重声明:
所展示代码已通过 LeetCode 运行通过,请放心食用~
推荐阅读
站长 polarisxu
自己的原创文章
不限于 Go 技术
职场和创业经验
Go语言中文网
每天为你
分享 Go 知识
Go爱好者值得关注
