#381 Spiral Matrix II

来源:互联网 发布:高通一键开启写号端口 编辑:程序博客网 时间:2024/06/05 13:36

题目描述:

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

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


0 0
原创粉丝点击