欢迎光临散文网 会员登陆 & 注册

力扣:剑指 Offer 29. 顺时针打印矩阵

2023-03-14 19:05 作者:薄荷硬糖酱  | 我要投稿

题目:

剑指 Offer 29. 顺时针打印矩阵

难度简单509收藏分享切换为英文接收动态反馈

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

 

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]

示例 2:

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]

 

限制:

  • 0 <= matrix.length <= 100

  • 0 <= matrix[i].length <= 100

注意:本题与主站 54 题相同:https://leetcode-cn.com/problems/spiral-matrix/

第一种法:

class Solution {

public:

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

        if(matrix.size()==0||matrix[0].size()==0){

            return {};

        }

        vector<int> s;

        int col=matrix[0].size();

        int row=matrix.size();

        int right,left,top,bottom;

        right=col-1,left=0;

        top=0,bottom=row-1;

        int cnt=0;

        while(right>=left&&top<=bottom){

            for(int i=left;i<=right;i++){

                s.push_back(matrix[top][i]);

                cnt++;

                if(cnt==col*row){

                    return s;

                }

            }

            for(int i=top+1;i<=bottom;i++){

                s.push_back(matrix[i][right]);

                cnt++;

                if(cnt==col*row){

                    return s;

                }

            }

            for(int i=right-1;i>=left;i--){

                s.push_back(matrix[bottom][i]);

                cnt++;

                    if(cnt==col*row){

                        return s;

                    }

            }

            for(int i=bottom-1;i>top;i--){

                s.push_back(matrix[i][left]);

                cnt++;

                    if(cnt==col*row){

                        return s;

                    }

            }

            left++,right--;

            top++,bottom--;

        }

        return s;

    }

};

注意细节:不要把横或列搞错,不要把循环写错

力扣:剑指 Offer 29. 顺时针打印矩阵的评论 (共 条)

分享到微博请遵守国家法律