54.螺旋矩阵
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
代码
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size();//获得尺寸是这样
int n = matrix[0].size();
// cout<<m<<" "<<n<<endl;
vector<int> res(m*n);//声明是这样
int t=0;
int r=n-1;
int b=m-1;
int l=0;
int k=0;
int i=0,j=0;
while (k<m*n) {
while(j<=r&&k<m*n) {//最后退出边界时,卡了贼就,k<m*n,不然会一直往下走
res[k++]=matrix[i][j++];
}
j--;
i++;
r--;
while (i<=b&&k<m*n) {
res[k++]=matrix[i++][j];
}
i--;
j--;
b--;
while (j>=l&&k<m*n) {
res[k++]=matrix[i][j--];
}
j++;
i--;
l++;
while (i>t&&k<m*n) {
res[k++]=matrix[i--][j];
}
i++;
j++;
t++;
}
return res;
}
};
59.螺旋矩阵Ⅱ
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
提示:
1 <= n <= 20
代码
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
//通过边界的缩小来控制螺旋填入数字
vector<vector<int>> a(n, vector<int>(n, 0));
//int a[n][n];
int t=0;
int r=n-1;//边界
int b=n-1;
int l=0;
int k=1;
int i=0,j=0;
while (k<=n*n) {
while(j<=r&&k<=n*n) {
a[i][j++]=k++;
}
j--;
i++;
r--;
while (i<=b&&k<=n*n) {
a[i++][j]=k++;
}
i--;
j--;
b--;
while (j>=l&&k<=n*n) {
a[i][j--]=k++;
}
j++;
i--;
l++;
while (i>t&&k<=n*n) {//注意细节
a[i--][j]=k++;
}
i++;
j++;
t++;
}
return a;
}
};