天天看點

leetcode_c++: Spiral Matrix II(059)

題目

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

For example,

Given n = 3,

You should return the following matrix:

[

[ 1, 2, 3 ],

[ 8, 9, 4 ],

[ 7, 6, 5 ]

]

算法

複雜度:O(nm)

class Solution {
public:
    vector<vector<int> > generateMatrix(int n) {
        if(n==) return vector<vector<int> >(); //  傳回空的數組
        vector<vector<int> > ret(n,vector<int>(n,));

        int rowBegin=;
        int rowEnd=n-;
        int colBegin=;
        int colEnd=n-;
        int num=;

        while(rowBegin<=rowEnd && colBegin <= colEnd){
            if(num<=n*n) //判斷是否達到最大值
            {
                //向右周遊添加
                for(int j=colBegin;j<=colEnd;j++){
                    ret[rowBegin][j]=num;
                    num++;
                }
            }
            rowBegin++;

            if(num<=n*n) //判斷是否達到最大值
            {
                //向下周遊添加
                for(int i=rowBegin;i<=rowEnd;i++){
                    ret[i][colEnd]=num;
                    num++;
                }
            }
            colEnd--;


            if(num<=n*n) //判斷是否達到最大值
            {
                //向左周遊添加
                for(int j=colEnd;j>=colBegin;j--){
                    ret[rowEnd][j]=num;
                    num++;
                }
            }
            rowEnd--;

            if(num<=n*n) //判斷是否達到最大值
            {
                //向上周遊添加
                for(int i=rowEnd;i>=rowBegin;i--){
                    ret[i][colBegin]=num;
                    num++;
                }
            }
            colBegin++;


        }
        return ret;
    }
};