文章目录
- 螺旋矩阵
- 解题思路
螺旋矩阵
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
解题思路
模拟这个螺旋过程。
- 初始化数组
- 确定循环次数,loop = n / 2;
- 循环时,奇数的中间值需要特殊处理
- startx,starty,用于确定每一次循环的起始点
- offset,用于减少每一次循环的此处
- mid,用于处理中间值
终点:**循环不变量,**每一次循环遵循左闭右开的原则。
分为
- 最上方从左往右
- 最右方从上往下
- 最下方从右往左
- 最左方从下往上
详细代码如下:
class Solution {public int[][] generateMatrix(int n) {//保证循环不变量的操作int startx = 0 ,starty = 0;int result[][] = new int[n][n]; //初始化数组int loop = n / 2; //循环次数,奇数时,中间值需要特殊处理。int mid = n / 2; //中间值int i,j; //用于循环int offset = 1; //用于减少每一次的循环次数int count = 1; //用于赋值while(loop-- > 0){ //循环次数//最上方从左往右for(j = starty; j < n - offset; j++){result[startx][j] = count++;}//最右方从上往下for(i = startx;i < n- offset;i++){result[i][j] = count++;}//最下方从右往左for(;j > starty;j--){result[i][j] = count++;}//最左方从下往上for(;i > startx;i--){result[i][j] = count++;}startx++; //设置下一次的起始点starty++; //设置下一次的起始点offset++; //设置下一次的循环次数}//如果为奇数,中间值,特殊处理if(n % 2 == 1){result[mid][mid] = count; }return result;}
}
我是小辉,24 届毕业生。当下是找工作ing,欢迎关注,持续分享。