2.矩阵旋转填入数字

题目和上一题矩阵旋转读取思路没有一点差异,所以直接贴出代码,并附上注释。

vector<vector<int> > generateMatrix(int n) 
    {
        /*matrix 为输入矩阵*/
        vector<vector<int>> result(n,vector<int>(n));//结果
         if(!n) return result;//检测是否为空
        int row=n;//行
        int col=n;//列
       
        vector<vector<int>> direction={{0,1},{1,0},{0,-1},{-1,0}};//存方向的数组
        int select[2]={col,row-1};//select[0]表示水平移动次数
        int cur[2]={0,-1};//当前移动点的坐标
        int dir=0;//当前方向0代表向右,1代表向下,2代表向左,3代表向上
        int k=1;
        while(select[dir%2])
        {
            int steps=select[dir%2];
            for(int i=0;i<steps;i++)//在dir方向移动的次数
            {
                cur[0]+=direction[dir][0];
                cur[1]+=direction[dir][1];
                result[cur[0]][cur[1]]=k++;
            }
            select[dir%2]--;//根据规律水平或者竖直方向减一
            dir=(dir+1)%4;//按照顺序变换方向
        }
        return result;
    }

猜你喜欢

转载自blog.csdn.net/feng__shuai/article/details/80935646
今日推荐