Skip to content

54. 螺旋矩阵【未完成】 ​

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;
	}
};

对是对了,但是暂时不想改进,之后再说吧