题目:
代码(首刷看解析,2023年12月29日):
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> ans(n,vector<int>(n,0));
int startX = 0, startY = 0;
int offset = 1;
int count = 1;
int loop = n / 2;
int i,j;
while(loop --){
i = startX;
j = startY;
for(j = startY; j < n - offset ; ++j){
ans[i][j] = count++;
}
for(i = startX; i < n - offset ; ++i){
ans[i][j] = count++;
}
for(; j > startY ; --j){
ans[i][j] = count++;
}
for(; i > startX ; --i){
ans[i][j] = count++;
}
offset++;
startX++;
startY++;
}
if(n % 2){
ans[n/2][n/2] = count;
}
return ans;
}
};
代码(二刷自解 2024年4月15日 13min)
中间的bottom--写成了bottom++
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
// 左闭右闭
vector<vector<int>> res(n, vector<int>(n));
int left = 0, right = n - 1;
int top = 0, bottom = n - 1;
int count = 1;
while (count <= n * n) {
for (int i = left; i <= right; ++i) {
res[top][i] = count++;
}
top++;
for (int i = top; i <= bottom; ++i) {
res[i][right] = count++;
}
right--;
if (bottom > top) {
for (int i = right; i >= left; --i) {
res[bottom][i] = count++;
}
bottom--;
}
if (left < right) {
for (int i = bottom; i >= top; --i) {
res[i][left] = count++;
}
left++;
}
}
return res;
}
};