解题思路:按照图示思路模拟过程进行

image.png

    1. 螺旋矩阵

      vector<vector<int>> generateMatrix(int n) {
      // 创建二维矩阵
      vector<vector<int>> matrix(n);
      for (int i = 0; i < matrix.size(); i++)
          matrix[i].resize(n);
      // 上下左右
      int u = 0;
      int d = n - 1;
      int l = 0;
      int r = n - 1;
      int num = 1;
      
      while (true) {
          // 上
          for (int i = l; i <= r; i++) matrix[u][i] = num++;
          if (u++ >= d) break;
          // 右
          for (int i = u; i <= d; i++) matrix[i][r] = num++;
          if (r-- <= l) break;
          // 下
          for (int i = r; i >= l; i--) matrix[d][i] = num++;
          if (d-- <= u) break;
          // 左
          for (int i = d; i >= u; i--) matrix[i][l] = num++;
          if (l++ >= r) break;
      }
      return matrix;
      }

59.螺旋矩阵II

vector<int> spiralOrder(vector<vector<int>>& matrix) {

        vector<int> res;
        // 上下左右
        int u = 0;
        int d = matrix.size() - 1;
        int l = 0;
        int r = matrix[0].size() - 1;
        int num = 1;

        while (true)
        {
            for (int i = l; i <= r; i++)
            {
                res.emplace_back(matrix[u][i]);
            }
            if(u++ >= d) break;

            for (int i = u; i <= d; i++)
            {
                res.emplace_back(matrix[i][r]);
            }
            if (r-- <= l) break;

            for (int i = r; i >= l; i--)
            {
                res.emplace_back(matrix[d][i]);
            }
            if (d-- <= u) break;

            for (int i = d; i >= u; i--)
            {
                res.emplace_back(matrix[i][l]);
            }
            if (l++ >= r) break;
        }
        return res;
    }

Simple
10 声望4 粉丝

引用和评论

0 条评论