关闭

leetcode_c++: Spiral Matrix II(059)

79人阅读 评论(0) 收藏 举报
分类:

题目

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==0) return vector<vector<int> >(); //  返回空的数组
        vector<vector<int> > ret(n,vector<int>(n,0));

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

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:125103次
    • 积分:6904
    • 等级:
    • 排名:第3572名
    • 原创:589篇
    • 转载:2篇
    • 译文:0篇
    • 评论:2条
    最新评论