
(模拟数组)Java 求解螺旋矩阵 II
发布日期:2021-05-07 19:48:57
浏览次数:10
分类:技术文章
本文共 1442 字,大约阅读时间需要 4 分钟。
文章目录
一、题目
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
二、题目解析
题目不难就是需要考虑全面情况,
模拟矩阵填充过程:
从左到右
从上到下 从右到左 从下到上
这是一圈的过程,填充的关键就是,填充过程中确定好边界条件
为了方便,要统一边界条件:都选用左闭右开原则,比如本题:第一圈
从左到右:[1,3),选用 1,2
从上到下:[3,5),选用 3,4 从右到左:[5,7),选用 5,6 从下到上:[7,1),选用 7,8
三、代码
class Solution { public int[][] generateMatrix(int n) { //表示当前循环的圈数 int loop = 1; //表示每一圈的起始位置 int startx = 0, starty = 0; //存储结果的二维数组 int res[][] = new int[n][n]; //赋值的数字 int num = 1; int i, j; while (loop <= (n >> 1)) { i = startx; j = starty; //四个for循环模拟一圈 //都遵循左闭右开原则 //模拟从左到右填充 for (j = starty; j < n - loop; j++) { res[i][j] = num++; } //模拟从上到下填充 for (i = startx; i < n - loop; i++) { res[i][j] = num++; } //模拟从右到左填充 for (; j > starty; j--) { res[i][j] = num++; } //模拟从下到上填充 for (; i > startx; i--) { res[i][j] = num++; } //下一圈开始时,起始位置都要加一 //比如起始是(0,0),则第二圈就是:(1,1) startx++; starty++; //圈数加一 loop++; } //如果是奇数的话单独填充中间位的元素 if ((n & 1) == 1) { res[n >> 1][n >> 1] = num; } return res; }}
四、总结
对于本题,关键模拟一圈四步
填充过程中,注意边界条件要统一
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月12日 22时04分12秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
设计模式之组合模式
2019-03-04
(恋上数据结构笔记):优先级队列(Priority Queue)
2019-03-04
(Python学习笔记):字典
2019-03-04
(C++11/14/17学习笔记):并发基本概念及实现,进程、线程基本概念
2019-03-04
(C++11/14/17学习笔记):线程启动、结束,创建线程多法、join,detach
2019-03-04
leetcode 14 最长公共前缀
2019-03-04
做做Java
2019-03-04
map的find函数和count函数
2019-03-04
C++并发与多线程(一)
2019-03-04
7628 EDCCA认证寄存器修改(认证自适应)
2019-03-04
计算机网络子网划分错题集
2019-03-04
java一些基本程序
2019-03-04
卷积神经网络六之CNN反向传播计算过程
2019-03-04
神经元与神经网络一之概述
2019-03-04
FANUC机器人R-30iB_R-30iB PLUS备件规格型号统计整理
2019-03-04
FANUC机器人的镜像备份操作及U盘格式化具体步骤
2019-03-04
vue-依赖-点击复制
2019-03-04
js井子棋
2019-03-04
LeetCode 116填充每个节点的下一个右侧结点指针
2019-03-04
2021-4-28【PTA】【L2-1 包装机 (25 分)】
2019-03-04