螺旋矩阵
carl 原文:螺旋矩阵
59. 螺旋矩阵 II
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> matrix(n,vector<int>(n,0));
int xpos = 0,ypos = 0;
int number = 1;
int loop = n/2;
int temp = 1;
int i,j;
while(loop--){
i = ypos;
j = xpos;
for(i = ypos; i < ypos + n - temp; i++){
matrix[ypos][i] = number++;
}
for(j = xpos;j < xpos + n - temp; j++ ){
matrix[j][i] = number ++;
}
for(; i > ypos; i--){
matrix[j][i] = number++;
}
for(;j > xpos; j--){
matrix[j][i] = number++;
}
xpos++, ypos++;
temp += 2;
}
if(n%2)matrix[n/2][n/2] = number;
return matrix;
}
};
54. 螺旋矩阵
这个题目和上一个不一样的地方在于他不是正方形矩阵 ,行列的数量不一,因此需要更多的变量来记录,但事实本质的螺旋循环思想是一样的。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> ans;
int l = 0, r = matrix[0].size() - 1, u = 0, d = matrix.size() - 1,i = 0, j = 0;
while(l <= r && u <= d)
{
for(int i = l; i <= r; i++)
ans.push_back(matrix[u][i]);
for(int i = u + 1; i <= d; i++)
ans.push_back(matrix[i][r]);
for(int i = r - 1; i >= l && u < d; i--)
ans.push_back(matrix[d][i]);
for(int i = d - 1; i > u && l < r; i--)
ans.push_back(matrix[i][l]);
l++, r--, u++, d--;
}
return ans;
}
};
剑指 Offer 29. 顺时针打印矩阵
和54题相同,这是之前写过的博客:剑指 Offer 29. 顺时针打印矩阵
数组结束:carl 总结篇