Question

Given a positive integer n, generate a square matrix filled with elements from 1 to _n_2 in spiral order.

Example:

Input: 3 Output: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]


Solution

class Solution {
 public:
  vector<vector<int>> generateMatrix(int n) {
    vector<vector<int>> res(n, vector<int>(n, 0));
    int val = 1, c = (n + 1) / 2, p = n;

    for (int i = 0; i < c; ++i, p -= 2) {
      for (int row_up = i; row_up <= i + p - 1; ++row_up)  //UP
        res[i][row_up] = val++;

      for (int row_right = i + 1; row_right <= i + p - 1; ++row_right) //Right
        res[row_right][i + p - 1] = val++;

      for (int row_bottom = n - i - 2; row_bottom >= i; --row_bottom) //Bottom
        res[i + p - 1][row_bottom] = val++;

      for (int row_left = n - i - 2; row_left > i; --row_left) { //Left
        res[row_left][i] = val++;
    }
    return res;
  }
};
By guozetang            Updated: 2020-09-19 13:02:30

results matching ""

    No results matching ""