【leetcode59】螺旋矩阵
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
输入:n = 1
输出:[[1]]
代码
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
//将循环分成四个方向
std::vector<std::vector<int> > twoDArray(n,std::vector<int>(n,0));
//循环次数,n为奇数时单列
int loop = n / 2;
//起始位置
int startX = 0;
int startY = 0;
//偏移量
int offset = 1;
//计数值count=[1,n^2]
int count = 1;
while (loop>0) {//条件loop>=0,loop
//i表示一维坐标,j表示二维坐标
int i = startX;
int j = startY;
//第一条边
for (i; i < n - offset; ++i) {
twoDArray[startX][i] = count++;
}
//第二条边
//i = n - offset
for (j; j < n - offset; ++j) {
twoDArray[j][i] = count++;
}
//第三条边
//j = n - offset
for (i; i > startX; --i) {
twoDArray[j][i] = count++;
}
//第四条边
for (j; j > startX; --j) {
twoDArray[j][i] = count++;
}
startX++;
startY++;
offset++;
loop--;
}
if (n % 2 != 0) {
twoDArray[n/2][n/2] = count++;
}
return twoDArray;
}
int main(){
unsigned int n = 5;
std::vector<std::vector<int> > arr= generateMatrix(n);
for (int i = 0; i < n;i++) {
for (int j = 0; j < n;j++) {
cout << arr[i][j] << ' ';
}
cout << endl;
}
return 0;
};
- n = 5
- n = 6