leetcode|被一道美团面试题转晕
共 848字,需浏览 2分钟
·
2020-07-31 18:22
今天为大家讲解 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爱好者值得关注