54. 螺旋矩阵【未完成】
59的加强版,不再是正方形。
所以我在59的基础上修改了一下,感觉有点屎:
cpp
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>> &matrix)
{
int m = matrix.size(), n = matrix[0].size();
int num = 0;
vector<int> ans(m * n, 0);
for (int layer = 1; layer <= min(m, n) / 2; layer++) {
int x, y;
int side = n + 1 - 2 * layer;
x = layer - 1, y = layer - 1;
for (int i = 0; i < side; i++) {
ans[num++] = matrix[x][y + i];
}
side = m + 1 - 2 * layer;
x = layer - 1, y = n - layer;
for (int i = 0; i < side; i++) {
ans[num++] = matrix[x + i][y];
}
side = n + 1 - 2 * layer;
x = m - layer, y = n - layer;
for (int i = 0; i < side; i++) {
ans[num++] = matrix[x][y - i];
}
side = m + 1 - 2 * layer;
x = m - layer, y = layer - 1;
for (int i = 0; i < side; i++) {
ans[num++] = matrix[x - i][y];
}
}
if (m >= n && n % 2 == 1) {
for (int i = 0; i < m - 2 * (n / 2); i++) {
ans[num++] = matrix[n / 2 + i][n / 2];
}
}
if (m < n && m % 2 == 1) {
for (int i = 0; i < n - 2 * (m / 2); i++) {
ans[num++] = matrix[m / 2][m / 2 + i];
}
}
return ans;
}
};对是对了,但是暂时不想改进,之后再说吧