剑指offer:顺时针打印矩阵

这里写图片描述

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        vector<int> r;
        r.clear();

        //matrix[hang][lie]
        int hang = matrix.size(),
            lie = matrix[0].size();

        //圈数;从左到右,从上到下,从右到左,从下到上为一圈
        int quan = ((hang < lie ? hang : lie) + 1) / 2;//取最小值计算圈数

        //不要忘记数组都是下标从0开始,不要忘记减去1
        for(int i = 0; i < quan; i++)
        {
            //从左往右打印
            for(int j = i; j < lie - i; j++)
            r.push_back(matrix[i][j]);//每次都是行j变列不变

            //从上往下打印
            for(int k = i + 1; k < hang - i; k++)//k=i+1表示从i的下一行开始
            r.push_back(matrix[k][lie - 1 - i]);//每次都是行不变列k变

            //从右往左打印,记得判断是否重复
            for(int m = lie - 1 - 1 - i; (m >= i) && (hang - 1 - i != i) ; m--)
            r.push_back(matrix[hang - 1 - i][m]);//每次都是行m变列不变

            //从下往上打印
            for(int n = hang - 1 - 1 -i ; (n > i) && (lie - 1 - i != i) ; n--)
            r.push_back(matrix[n][i]);//每次都是行不变列n变
        }
        return r;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值