• 矩阵遍历


    题目一: 转圈遍历一个矩阵

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

    For example,
    Given the following matrix:

    [
     [ 1, 2, 3 ],
     [ 4, 5, 6 ],
     [ 7, 8, 9 ]
    ]
    

    You should return [1,2,3,6,9,8,7,4,5].

     

    思路:使用start X,end X,start Y,end Y来记录当前遍历到的区域 。需要注意到到点是,当中心只剩下一行或者一列或一个元素的时候,需要进行特殊处理。

        vector<int> spiralOrder(vector<vector<int> > matrix){

            vector<int> result;

            if(matrix.size() == 0){

                return result;

            }

            int startX, startY, endX, endY;

            startX = 0;

            startY = 0;

            endY = matrix.size()-1;

            endX = matrix[0].size()-1;

            

            while(startX < endX && startY < endY){

                for(int i=startX; i<endX; i++){

                    result.push_back(matrix[startY][i]);

                }

                for(int i=startY; i<endY; i++){

                    result.push_back(matrix[i][endX]);

                }

                for(int i=endX; i>startX; i--){

                    result.push_back(matrix[endY][i]);

                }

                for(int i=endY; i>startY; i--){

                    result.push_back(matrix[i][startX]);

                }

                startX++;

                startY++;

                endX--;

                endY--;

            }

     

            if(startX == endX && startY == endY){

                result.push_back(matrix[startX][startY]);

            }

            if(startX == endX && startY < endY){

                for(int i=startY; i<=endY; i++){

                    result.push_back(matrix[i][startX]);

                }

            }

            if(startY == endY && startX < endX){

                for(int i=startX; i<=endX; i++){

                    result.push_back(matrix[startY][i]);

                }

            }

            

            return result;

        }

     

     

     

     

    题目二:创建一个矩阵

    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 ]
    ]
    

    思路:过程与题一中基本相同,先创建好矩阵,然后仍然按照题一中点方式,遍历填入值

        vector<vector<int> > generateMatrix(int n) {

            vector<vector<int> > result;

            for(int i=0; i<n; i++){

                vector<int> temp(n, 0);

                result.push_back(temp);

            }

            int startX, endX, startY, endY, count;

            startX = 0;

            startY = 0;

            endX = n-1;

            endY = n-1;

            count = 1;

            

            while(startX < endX && startY < endY){

                for(int i=startX; i<endX; i++){

                    result[startY][i] = count++;

                }

                for(int i=startY; i<endY; i++){

                    result[i][endX] = count++;

                }

                for(int i=endX; i>startX; i--){

                    result[endY][i] = count++;

                }

                for(int i=endY; i>startY; i--){

                    result[i][startX] = count++;

                }

                startX++;

                startY++;

                endX--;

                endY--;

            }

            if(startX == endX && startY == endY){

                result[startX][startY] = count++;

            }

            if(startX == endX && startY < endY){

                for(int i=startY; i<=endY; i++){

                    result[i][startX] = count++;

                }

            }

            if(startY == endY && startX < endX){

                for(int i=startX; i<=endX; i++){

                    result[startY][i] = count++;

                }

            }

            

            return result;

     

        }

    不积跬步无以至千里,不积小流无以成江海。业精于勤而荒于嬉,行成于思而毁于随
  • 相关阅读:
    ThinkPHP 3.2.3
    MobaXterm 可替代 XShell4 和 Xftp4
    SourceTree 合并DEV分支到master
    WOX 和 everything 差不多,挺不错也
    function 的入参 如果是指针的话,如果你用的好的话,会颠覆三观啊 这里就是指对象,数组不用考虑 // 夏娃的苹果
    buildFast.js node.js 快速发布到gitee上,这样就不用每次点击,并且自动弹出发布页面,再点击发布,完美!
    velocity.js
    【linux之sed及vim】
    linux curl命令详解
    哈夫曼(huffman)树和哈夫曼编码
  • 原文地址:https://www.cnblogs.com/weilf/p/4070534.html
Copyright © 2020-2023  润新知