本文共 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/