LeetCode-54-Spiral Matrix(矩阵/模拟/递归)-Medium

来源:互联网 发布:php常用的正则表达式 编辑:程序博客网 时间:2024/06/10 14:41

题目理解:

将一维或二维数组中的元素按顺时针放向进行打印;


解题分析:

1. 模拟;

2. 递归:

1)每次重新计算最开始的左上初始点;

2)然后依此遍历最上一行,最右一列,最后一行,以及最左一行;

3)注意避免重复遍历,处理好边界问题;


解题代码:

class Solution {private:    void process(vector<vector<int>> &m,int _row, int _col, int _initR, int _initC, vector<int> &ans){        int row=_row;        int col=_col;        int initR=_initR;        int initC=_initC;                if(row<=0 || col<=0){            return;        }                for(int i=0; i<col; i++){            ans.push_back(m[initR][initC+i]);        }                if(row<=1){            return;        }        for(int i=1; i<row; i++){            ans.push_back(m[initR+i][initC+col-1]);        }                if(col<=1){            return;        }        for(int i=1; i<col; i++){            ans.push_back(m[initR+row-1][initC+col-1-i]);        }                for(int i=1; i<row-1; i++){            ans.push_back(m[initR+row-1-i][initC]);        }                row-=2;        col-=2;        initR+=1;        initC+=1;        process(m, row, col, initR, initC, ans);    }public:    vector<int> spiralOrder(vector<vector<int>>& matrix) {        vector<int> ans;        int rowSize=matrix.size();        cout<<"rowSize= "<<rowSize<<endl;        if(rowSize==0){            return ans;        }                int colSize=matrix[0].size();        cout<<"colSie= "<<colSize<<endl;        if(colSize==0){            return ans;        }                process(matrix, rowSize, colSize, 0, 0, ans);                return ans;    }};


0 0
原创粉丝点击