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 运行通过,请放心食用~



推荐阅读



学习交流 Go 语言,扫码回复「进群」即可


站长 polarisxu

自己的原创文章

不限于 Go 技术

职场和创业经验


Go语言中文网

每天为你

分享 Go 知识

Go爱好者值得关注



浏览 51
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐