一道题错过美团!

    技术2022-07-10  116

    (我找图有点厉害)

    今天是小浩算法 “365刷题计划” 第 108 天。为大家讲解 leetcode 第 59 题,是一道中等难度的题目。

    大家也可以先看下该题的第一个版本:

    漫画:一文看懂螺旋矩阵求解

    本类题目在面试时出现的频率极高,尤其是对于工作年限在三年内的同学。因为该题非常考验 coding 能力,尤其是对边界条件的处理。

    很容易筛选面试者。

    进刷题群的小伙伴

    关注回复【进群】即可

    01

    PART

    螺旋矩阵2⃣️

    做这道题之前,可以通过上面的链接做一下螺旋矩阵 1⃣️。

    给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

    输入: 3

    输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]

    题目理解较为容易,给定 n = 3,那就生成一个 3^2 = 9 的矩阵。大家看下面的图可能更加直观一些:

    02

    PART

    题解分析

    螺旋矩阵类的题目,思路基本都为模拟路径,难点都是考察边界的处理。虽然也有一些奇淫巧技,但万变不离其宗。

    既然要模拟路径,先分析下路径是什么:

    右-下-左-上

    然后模拟向内环绕的过程,逐层填充:

    这种方法其实有一个专业点的名字,叫做:蛇形填数

    这里额外说一下,除了上面这种填充方式外,还有一种填充方式:

    两者的区别,只是边界条件设定不同。

    第一种填充方式的代码:

    //java class Solution {     public int[][] generateMatrix(int n) {         int[][] res = new int[n][n];         for(int s = 0, e = n - 1, m = 1; s<=e ; s++,e--){             for (int j = s; j <= e; j++) res[s][j] = m++;             for (int i = s+1; i <= e; i++) res[i][e] = m++;             for (int j = e-1; j >= s; j--) res[e][j] = m++;             for (int i = e-1; i >= s+1; i--) res[i][s] = m++;         }         return res;     } }

    第二种填充方式的代码:

    //java class Solution {     public int[][] generateMatrix(int n) {         int[][] res = new int[n][n];         for (int s = 0, e = n - 1, m = 1; s <= e; s++, e--) {             if (s == e) res[s][e] = m++;             for (int j = s; j <= e - 1; j++) res[s][j] = m++;             for (int i = s; i <= e - 1; i++) res[i][e] = m++;             for (int j = e; j >= s + 1; j--) res[e][j] = m++;             for (int i = e; i >= s + 1; i--) res[i][s] = m++;         }         return res;     } }

    看完这两种解法,有没有 get✔ 到这道题目的核心呢?正是大量的边界操作,让这道题目成为了面试官的香饽饽。如果 coding 能力比较差,基本都会栽到这道题目上。

    所以,非常建议基础较差的同学,认真练习一下上面的两种实现。

    03

    PART

    相似题目

    然后这里我准备了几道同一类型的题目,建议大家刷一刷。完成之后可能会有一些不一样的思考。

    螺旋矩阵(基本)

    旋转图像(滴滴)

    生命游戏(头条、Google 面试题)

    如果你也想加入我们每日刷题

    扫码,回复【进群】就可以啦。

    也可以直接登录网站学习!

    https://www.geekxh.com

    推荐几篇必看文章:

    漫画:小白为了面试如何刷题?(呕心沥血算法指导篇)

    漫画:呕心泣血算法指导篇(真正的干货,怒怼那些说算法没用的人)

    动态规划入门看这篇就够了,万字长文!

    万字长文!位运算面试看这篇就够了!


    大家帮我多转发,我帮大家多写题解~奥利给!

    Processed: 0.014, SQL: 9