力扣59. 螺旋矩阵 II

文章目录

力扣59. 螺旋矩阵 II

示例

思路

本题并不涉及到什么算法,就是模拟过程,但却十分考察对代码的掌控能力,容易出错!

而求解本题要坚持循环不变量原则 。就能很大程度避免错误

模拟顺时针画矩阵的过程:

填充上行从左到右

填充右列从上到下

填充下行从右到左

填充左列从下到上

由外向内一圈一圈这么画下去。

可以发现这里的边界条件非常多,在一个循环中,如此多的边界条件,如果不按照固定规则来遍历,那就是一进循环深似海,从此offer是路人。

这里一圈下来,我们要画每四条边,这四条边怎么画,每画一条边都要坚持一致的左闭右开 ,或者左开右闭的原则,这样这一圈才能按照统一的规则画下来。

代码如下,已经详细注释了每一步的目的,可以看出while循环里判断的情况是很多的,代码里处理的原则也是统一的左闭右开

代码实现

bash 复制代码
class Solution {
    public int[][] generateMatrix(int n) {
        int loop = 0;  // 控制循环次数
        int[][] res = new int[n][n];
        int start = 0;  // 每次循环的开始点(start, start)
        int count = 1;  // 定义填充数字
        int i, j;

        while (loop++ < n / 2) { // 判断边界后,loop从1开始
            // 模拟上侧从左到右
            for (j = start; j < n - loop; j++) {
                res[start][j] = count++;
            }

            // 模拟右侧从上到下
            for (i = start; i < n - loop; i++) {
                res[i][j] = count++;
            }

            // 模拟下侧从右到左
            for (; j >= loop; j--) {
                res[i][j] = count++;
            }

            // 模拟左侧从下到上
            for (; i >= loop; i--) {
                res[i][j] = count++;
            }
            start++;
        }

        if (n % 2 == 1) {
            res[start][start] = count;
        }

        return res;
    }
}

总结收获

这道题依然要坚持循环不变量原则(二分法也是这样的!)

相关推荐
菥菥爱嘻嘻1 分钟前
力扣面试150(44/150)
javascript·leetcode·面试
liulilittle14 分钟前
备忘录设计模式 vs 版本设计模式
开发语言·c++·算法·设计模式
Smilecoc16 分钟前
秩为1的矩阵的特征和性质
线性代数·机器学习·矩阵
菜鸟5555522 分钟前
常用算法思想及模板
算法·dp·模板·分治·竞赛·算法思想
肆佰.24 分钟前
c++ 派生类
数据结构·c++·算法
醉卧红尘的鱼40 分钟前
最优估计准则与方法(5)加权最小二乘估计(WLS)_学习笔记
学习·算法
她说人狗殊途1 小时前
Map 集合
java·开发语言·算法
leafpipi1 小时前
【机器学习】pycharm使用SSH SFTP 远程连接 ubuntu服务器 进行开发+调试+数据训练
服务器·学习·算法·ubuntu·pycharm·ssh
姜不吃葱1 小时前
【力扣热题100】哈希——最长连续序列
算法·leetcode·哈希算法
百度Geek说2 小时前
直击WAIC | 百度袁佛玉:加速具身智能技术及产品研发,助力场景应用多样化落地
算法