leetcode|被一道美团面试题转晕

Go语言精选

共 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爱好者值得关注



浏览 37
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报