LeetCode-59-Spiral Matrix II(Array)-Medium

来源:互联网 发布:珠宝绘图软件 编辑:程序博客网 时间:2024/05/17 07:46

题意理解:

给定n,求解由1-n组成的n维矩阵。其中,矩阵内容的旋转遍历即为1-n的排序内容;


解题分析:

逐层递归填写n维矩阵的内容;


解题代码:

class Solution {private:    void process(vector<vector<int>> &m, int _initPos, int _n, int _initNum){        int initPos=_initPos;        cout<<"initPos= "<<initPos<<endl;        int n=_n;        cout<<"n= "<<n<<endl;        int initNum=_initNum;        cout<<"initNum= "<<initNum<<endl;        if(n<=0){            return;        }                if(n==1){            m[initPos][initPos]=initNum;            return;        }                if(n==2){            m[initPos][initPos]=initNum;            m[initPos][initPos+1]=initNum+1;            m[initPos+1][initPos+1]=initNum+2;            m[initPos+1][initPos]=initNum+3;            return;        }                for(int i=0; i<n;i++){            m[initPos][initPos+i]=initNum+i;        }        initNum+=n;        for(int i=1; i<n; i++){            m[initPos+i][initPos+n-1]=initNum+i-1;        }        initNum+=n-1;        for(int i=1; i<n; i++){            m[initPos+n-1][initPos+n-1-i]=initNum+i-1;        }        initNum+=n-1;        for(int i=1; i<n-1; i++){            m[initPos+n-1-i][initPos]=initNum+i-1;        }                initPos++;        initNum+=n-2;        n-=2;        process(m, initPos, n, initNum);    }public:    vector<vector<int>> generateMatrix(int n) {        vector<vector<int>> ans;        for(int i=0; i<n; i++){            vector<int> t(n,0);            ans.push_back(t);        }                process(ans, 0, n, 1);                return ans;    }};


0 0