#381 Spiral Matrix II

    xiaoxiao2025-02-17  23

    题目描述:

    Given an integer n, generate a square matrix filled with elements from 1 to n^2 in spiral order.

     Notice
    Have you met this question in a real interview?  Yes Example

    Given n = 3,

    You should return the following matrix:

    [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 题目思路:

    这题的思路在于不断缩小上下左右的boundary,而不用每次都计算position这么复杂。需要注意的是,循环终止的条件不是转完一圈才退出,一旦检测到count达到了n*n,就可以break。

    Mycode(AC = 29ms):

    class Solution { public: /** * @param n an integer * @return a square matrix */ vector<vector<int>> generateMatrix(int n) { // Write your code here vector<vector<int>> sp_matrix(n, vector<int>(n, 0)); int count = 1, upper_row = 0, down_row = n - 1, left_col = 0, right_col = n - 1; while (count <= n * n) { // fill in upper row for (int i = left_col; i <= right_col; i++) { sp_matrix[upper_row][i] = count++; } upper_row++; if (count > n * n) break; // fill in right col for (int i = upper_row; i <= down_row; i++) { sp_matrix[i][right_col] = count++; } right_col--; if (count > n * n) break; // fill in down row for (int i = right_col; i >= left_col; i--) { sp_matrix[down_row][i] = count++; } down_row--; if (count > n * n) break; // fill in left col for (int i = down_row; i >= upper_row; i--) { sp_matrix[i][left_col] = count++; } left_col++; } return sp_matrix; } };

    转载请注明原文地址: https://ju.6miu.com/read-1296540.html
    最新回复(0)