当前位置: 首页 > news >正文

【数组】螺旋矩阵

https://leetcode.cn/problems/spiral-matrix-ii/description/

方法:模拟

通过这四个方向的遍历,,一层一层往里,于是有了四个方向(左闭右开)
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3da9147ad04f477b94072dad989633a1.png
我引入一个维度的概念,也就是最外面维度是0,往里面一层维度就+1。
特殊情况:n是奇数,最中间那个元素无法赋值到,添加一个if就能解决
值得注意:数组的边界问题,防止越界

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] matrix = new int[n][n];
        int b = n - 1;  // 边长-1
        int y = 1;  // 赋值数字
        int r = 0;  // 所处维度
        while(b > 0) {
            for(int i = r; i < b+r; i++) {
                matrix[r][i] = y++;
            }
            for(int i = r; i < b+r; i++) {
                matrix[i][n-r-1] = y++;
            }
            for(int i = n-r-1; i >= n - b - r; i--) {
                matrix[n-r-1][i] = y++;
            }
            for(int i = n-r-1; i >= n - b - r; i--) {
                matrix[i][r] = y++;
            }
                
            r++;
            b-=2;
        }
        if ( n % 2 != 0) {
            int mid = n / 2;
            matrix[mid][mid] = y;
        }
        return matrix;
    }
}

优化后:

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] matrix = new int[n][n];
        int startX = 0;  // x轴起始
        int startY = 0;  // y轴起始
        int count = 1;  // 计数
        int offset = 1;
        int times = n / 2;  // 进行 n / 2 次循环
        while(times-- > 0) {  
            int j = startY;
            int i = startX;
            for(; j < n - offset; j++) {
                matrix[startX][j] = count++;
            }
            for(; i < n - offset; i++) {
                matrix[i][j] = count++;
            }
            for(; j > startY; j--) {
                matrix[i][j] = count++;
            }
            for(; i > startX; i--) {
                matrix[i][startY] = count++;
            }
            startX++;
            startY++;
            offset++;
        }
        if(n % 2 != 0) {
            int mid = n/2;
            matrix[mid][mid] = count;
        }
        return matrix;
    }
}

相关文章:

  • 图解AI对话系统架构:一次讲透核心技术
  • 【读点论文】Object Storage on CRAQ
  • 2025最新-智慧小区物业管理系统
  • Excel多级联动下拉菜单的自动化设置(使用Python中的openpyxl模块)
  • 汤臣倍健业绩倒车:2024年利润下滑超六成,三大核心品牌销量失守
  • acwing112:三种排序方法解决组合排序问题
  • 【杂记三】Cython加速模块cython_nms未编译
  • 无人机数据处理系统设计要点与难点!
  • Linux输入系统应用编程
  • 短信验证码安全需求设计
  • 游戏引擎学习第182天
  • # 03_Elastic Stack 从入门到实践(三)-- 2
  • gulimall知识点
  • multi paxos协议
  • Python爬虫获取1688商品(按图搜索)接口的返回数据说明
  • HTTP 协议中请求与响应的详细解析
  • RFID技术智能仓储管理解决方案应用实践
  • 10_JavaScript数组排序和高阶方法
  • DeepSeek smallpond为何选中DuckDB?轻量级分析数据库的“屠龙术“
  • Python生成器详解
  • 如何识别一个网站是否做的好/网络营销平台的主要功能
  • 陕西省网站备案/河南网站推广多少钱
  • wordpress 资讯类模板/周口网站seo
  • 老网站改版启用二级域名/百度平台商家联系方式
  • 中国建设银行产品信息网站/刷外链
  • 义乌网站制作/西安建站推广