59. Spiral Matrix II
Given a positive integer n, generate an n x n matrix filled with elements from 1 to n2 in spiral order.
Example 1:
Input: n = 3
Output: [[1,2,3],[8,9,4],[7,6,5]]
Example 2:
Input: n = 1
Output: [[1]]
Constraints:
1 <= n <= 20
循环不变量
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n,vector<int>(n,0));
int startX = 0,startY = 0,offset = 1,count = 1;
int i,j;
int loops = n / 2;
while(loops--){
i = startX,j = startY;
for(j = startY;j < n - offset;j++) res[i][j] = count++;
for(i = startX;i < n - offset;i++) res[i][j] = count++;
for(;j > startY;j--) res[i][j] = count++;
for(;i > startX;i--) res[i][j] = count++;
startX++;
startY++;
offset++;
}
if(n % 2 == 1) res[n/2][n/2] = count;
return res;
}
};