19-顺时针打印矩阵

一、题目描述:

二、思路分析:分从左到右、从上到下、从右到左、从下到上四个步骤

三、代码实现:

C++实现:

class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        //思路:从左到右、从上到下、从右到左、从下到上循环遍历
        vector<int> res;//存储结果
        int rows = matrix.size();//行数
        int cols = matrix[0].size();//列数
        
        int left = 0,right = cols-1,top = 0,bottom = rows-1;
        while(left<=right && top<=bottom){
            //从左到右
            for(int i=left; i<=right; i++){
                res.push_back(matrix[top][i]);
            }
            //从上到下
            for(int j=top+1; j<=bottom; j++){
                res.push_back(matrix[j][right]);
            }
            //从右到左
            if(top != bottom){//if判断
                for(int k=right-1; k>=left; k--){
                    res.push_back(matrix[bottom][k]);
                }
            }
            //从下到上
            if(left != right){//if判断
                for(int t=bottom-1; t>top; t--){//是>而不是>=
                    res.push_back(matrix[t][left]);
                }
            }
            
            left++,top++,right--,bottom--;
        }
        return res;

    }
};

python 实现:

# -*- coding:utf-8 -*-
class Solution:
    # matrix类型为二维列表,需要返回列表
    def printMatrix(self, matrix):
        res = []
        rows = len(matrix)
        cols = len(matrix[0])
        
        left = 0
        right = cols-1
        top = 0
        bottom = rows-1
        while left<=right and top<=bottom:
            #从左到右
            for i in range(left,right+1):#左闭右开区间
                res.append(matrix[top][i])
            #从上到下
            for j in range(top+1,bottom+1):
                res.append(matrix[j][right])
            #从右到左
            if top!=bottom:
                for k in range(left,right)[::-1]:#[::-1]是将列表反过来
                    res.append(matrix[bottom][k])
            #从下到上
            if left!=right:
                for t in range(top+1,bottom)[::-1]:
                    res.append(matrix[t][left])
            left += 1
            right -= 1
            top += 1
            bottom -= 1
        return res

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值