给定一整数 n 产生一个 1 到 n*n的螺旋形数组

  • Post author:
  • Post category:其他

本题源自LeetCode

——————————————

例如,
假设n = 3,您应该返回以下矩阵:
[
  [1,2,3]
  [8,9,4]
  [7,6,5]
]


思路:

即从四个方向构造数组

 vector<vector<int> > generateMatrix(int n) {
        vector<vector<int>> result(n,vector<int>(n,0));
        int count = 1;
        int rowStart=0;
        int rowEnd=n-1;
        int colStart=0;
        int colEnd=n-1;
        while(count<=n*n){ 
            //从左到右
            for(int i=colStart;i<=colEnd;i++){
                result[rowStart][i]=count++;
            }
            rowStart++;
            //从上到下
            for(int i=rowStart;i<=rowEnd;i++){
                result[i][colEnd]=count++;
            }
            colEnd--;
            //从右到左
            for(int i=colEnd;i>=colStart;i--){
                result[rowEnd][i]=count++;
            }
            rowEnd--;
            //从下到上
            for(int i=rowEnd;i>=rowStart;i--){
                result[i][colStart]=count++;
            }
            colStart++;
        }
        return result;
    }

延伸 打印螺旋数组

代码:

 vector<int> spiralOrder(vector<vector<int> > &matrix) {
        int rows=matrix.size();
        int cols=0;
        if(rows){
            cols=matrix[0].size();
        }
        vector<int> result;
        int rowStart=0;
        int rowEnd=rows-1;
        int colStart=0;
        int colEnd=cols-1;
        int count=0;
        while(count<cols*rows){
            //从左到右
            for(int i=colStart;i<=colEnd;i++){
                result.push_back(matrix[rowStart][i]);
                count++;
            }
            rowStart++;
            //从上到下
            if(rowStart<=rowEnd){
                for(int i=rowStart;i<=rowEnd;i++){
                    result.push_back(matrix[i][colEnd]);
                    count++;
                }
                colEnd--;
            
            //从右到左
                if(colEnd>=colStart){
                    for(int i=colEnd;i>=colStart;i--){
                        result.push_back(matrix[rowEnd][i]);
                        count++;
                    }
                    rowEnd--;
                    //从下到上
                    if(rowEnd>=rowStart){
                        for(int i=rowEnd;i>=rowStart;i--){
                            result.push_back(matrix[i][colStart]);
                            count++;
                        }
                        colStart++;
                    }
                }
            }
        }
        return result;  
    }


版权声明:本文为i_am_bird原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。