解题思路:
使用左开右闭进行四个边的循环赋值
每次进入新的内圈,需要注意起始位置startx和starty的变化,以及边界n - offset的变化
分奇偶圈,判断为奇数圈后需要为中心点赋一次值
class Solution {public int[][] generateMatrix(int n) {int cnt = 1;int startx = 0;int starty = 0;int offset = 1;int[][] res = new int[n][n];int i, j;int loop = 1;while (loop <= n / 2) {for (j = starty; j < n - offset; j++)res[startx][j] = cnt++;for (i = startx; i < j; i++)res[i][j] = cnt++;for (; j > starty; j--)res[i][j] = cnt++;for (; i > startx; i--)res[i][j] = cnt++;startx++;starty++;offset++;loop++;}if (n % 2 != 0) res[startx][starty] = cnt;return res;}
}