LeetCode第59题螺旋矩阵 II

继续打卡算法题,今天学习的是LeetCode第59题螺旋矩阵 II,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。

分析一波题目

本题没有算法理论,主要是靠模拟过程,怎么模拟是个问题,而且不能出乱?

按上图这样,一圈一圈模拟。

1、先模拟行

2、再模拟列

3、再模拟行

4、再模拟列

颜色一样的在一个行或者列模拟,这里注意这里每个行或者列模拟的范围,遵循的规则是左边是闭的(包括),右边是开的(不包括)。 需要注意如果n是奇数,那么最后一个元素需要单独处理。

本题解题技巧

1、模拟一圈一圈填充,需要注意每行和,每列的范围。

编码解决

java 复制代码
class Solution {
    public int[][] generateMatrix(int n) {
        //思路 技巧 从外到內填充二维数据,优先从左往右->从上到下,从右到左,从下到上,循环n/2轮,数据就填充完成了
        //如果是n是奇数,则数组最后一个数字需要单独填充
        int result[][] = new int[n][n];
        //定义循环次数,每一个循环,填充4个方向,也就是一圈,依次由内到外的填充,左开右闭的原则
        int loop = n/2;
        //待填充的数
        int count=1;
        //控制循环边界,每一轮需要减1
        int offset = 1;

        int startX = 0;
        int startY = 0;
        while(loop > 0) {
            int x = startX;
            int y = startY;
            //从左往右遍历一行 n需要减少
            for(; y<n-offset;y++) {
                result[x][y] = count++;
            }

            //从上往下遍历一列
            for(; x<n-offset;x++) {
                result[x][y] = count++;
            }

            //从左往右遍历一列
            for(; y>startY;y--) {
                result[x][y] = count++;
            }

            //从下往上遍历一列
            for(; x>startX;x--) {
                result[x][y] = count++;
            }

            //填充完一圈 为下一圈做准备工作
            startX++;
            startY++;
            offset++;
            loop--;
        }

        if(n%2 ==1){
            result[n/2][n/2] = count++;
        }
        return result;
    }
}

总结

这种题目考虑思维的严谨性,没有算法理论,但是不能混乱,从外到內填充二维数据,优先从左往右->从上到下,从右到左,从下到上,循环n/2轮,数据就填充完成了。

相关推荐
用户938515635072 分钟前
手写迷你 Cursor 终端:深入 Node.js child_process 的 spawn 核心实现
javascript·后端
阿新聊ai3 分钟前
Claude Code 为什么总不懂你的项目?缺一张「项目地图」
前端·后端·面试
用户40966601317517 分钟前
Spring Boot 中 Filter、Interceptor、AOP 到底谁先执行?
后端
暗冰ཏོ12 分钟前
Spring Boot + Vue3 订单支付模块技术实现:支付单、回调验签、幂等处理与余额扣减
前端·spring boot·后端·vue·微信支付·支付宝支付
Csvn13 分钟前
Python 开发技巧 · 类型注解进阶 —— 从 `TypeVar` 到 `Protocol`,让类型检查真正帮你抓 bug
后端·python
foundbug99918 分钟前
Polar Code 编解码 MATLAB 实现
开发语言·算法·matlab
爷_21 分钟前
AI Coding Agent 沙箱的设计原理解析
前端·人工智能·后端
学渣超23 分钟前
微服务日志智能诊断系统(八) 全链路追踪——request_id驱动的跨服务诊断
java·后端·agent
爱勇宝23 分钟前
第 3 章:别把团队设计成一场内卷竞赛
前端·后端·程序员
ACGkaka_24 分钟前
Spring Boot 实战(四十一):集成 BPMN(Flowable+bpmn-js)
java·spring boot·后端