剑指offer:顺时针打印矩阵

本文提供了一种使用四个指针维护矩阵上下左右边界的解决方案,以实现按顺时针螺旋顺序打印矩阵元素的功能。通过逐步缩小搜索范围,确保每个元素只被访问一次。

题目描述:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

 

解题思路:

这题之前刷leetcode时遇到过。用四个指针来维护矩阵的上下左右边界,每输出完一行或一列就改动对应指针,使得矩阵的搜索范围缩写。

注意,每次更新完边界时,需要进行一次边界判断,防止重复扫描。

 

代码:

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        vector<int> res;
        if(matrix.size()==0)
            return res;
        int row_t = 0;
        int row_b = matrix.size()-1;
        int col_l = 0;
        int col_r = matrix[row_t].size()-1;
        while(row_t<=row_b && col_l<=col_r)
        {
            for(int i = col_l; i<=col_r; i++)
            {
                res.push_back(matrix[row_t][i]);
            }
            row_t++;
            if(row_t>row_b)
                break;
            for(int i = row_t; i<=row_b; i++)
            {
                res.push_back(matrix[i][col_r]);
            }
            col_r--;
            if(col_r<col_l)
                break;
            for(int i = col_r; i>=col_l; i--)
            {
                res.push_back(matrix[row_b][i]);
            }
            row_b--;
            if(row_b<row_t)
                break;
            for(int i = row_b; i>=row_t; i--)
            {
                res.push_back(matrix[i][col_l]);
            }
            col_l++;
            if(col_l>col_r)
                break;
        }
        return res;
    }
};

 

转载于:https://www.cnblogs.com/LJ-LJ/p/10596978.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值