博客
关于我
(模拟数组)Java 求解螺旋矩阵 II
阅读量:350 次
发布时间: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/

你可能感兴趣的文章
SVN 和 Git 区别
查看>>
JDK 内置的多线程协作工具类的使用场景
查看>>
Java 源代码到运行的过程
查看>>
Java 中哪些对象可以获取类对象
查看>>
linux 的 cp 命令如何复制不提示覆盖
查看>>
缓存穿透 / 缓存击穿 / 缓存雪崩 / 缓存一致性
查看>>
linux 的 pwd 命令
查看>>
linux 的 sleep 命令
查看>>
js 的 let var const 区别
查看>>
无线掌上B超USONIX-R6线阵B模图像初步
查看>>
无线掌上B超USONIX-R6凸阵B模图像初步
查看>>
react路由使用以及封装
查看>>
vue计算属性和监听器区别
查看>>
前端常用知识随手记
查看>>
使用 FileUpload 实现文件上传
查看>>
11.2.6 时间值的小数秒
查看>>
11.2.7 日期和时间类型之间的转换
查看>>
附录 B 错误信息和常见问题
查看>>
redis 内存溢出_从数据存储的角度告诉你Redis为什么这么快!
查看>>
实例分析Facebook激励视频广告接入
查看>>