博客
关于我
(模拟数组)Java 求解螺旋矩阵 II
阅读量:349 次
发布时间:2019-03-04

本文共 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;    }}

四、总结

对于本题,关键模拟一圈四步

填充过程中,注意边界条件要统一

转载地址:http://nvar.baihongyu.com/

你可能感兴趣的文章
「NOI2015」程序自动分析 并查集题解
查看>>
[JSOI2008]Blue Mary的战役地图 Hash题解
查看>>
结构型设计在工作中的一些经验总结
查看>>
如何提升员工体验 助力企业业务增长?这个棘手的问题终于被解决了!
查看>>
2020 AI 产业图谱启动,勾勒中国 AI 技术与行业生态
查看>>
“编程能力差,90%输在了数学上!”CTO:多数程序员都是瞎努力!
查看>>
我是程序员,我用这种方式铭记历史
查看>>
CSDN湘苗培优|保持热情,告别平庸
查看>>
YbtOJ hash和hash表课堂过关 例1 字符串哈希【hash】
查看>>
前后端数据交互之表单
查看>>
剑指offer JZ21 栈的压入弹出序列
查看>>
Netty4服务端入门代码示例
查看>>
VL53L0x TOF激光测距的 stm32 HAL库驱动代码
查看>>
自定义标签(JSP2.0)简单标签
查看>>
MyBatis自定义类型转换器
查看>>
Python:函数 ----》装饰器函数
查看>>
Python:面向对象
查看>>
Spring源码:prepareBeanFactory(beanFactory);方法
查看>>
Spring源码:initApplicationEventMulticaster源码解析
查看>>
AcWing 786: 第k个数
查看>>