【牛客网】顺时针打印矩阵 解题报告 (python)

原题地址:https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking

题目描述:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.

解题方案:

顺时针打印,一次循环打印四个方向,每次打印时,需要注意不能重复打印,最后两次打印需要判断一下。

# -*- coding:utf-8 -*-
class Solution:
    # matrix类型为二维列表,需要返回列表
    def printMatrix(self, matrix):
         # write code here
        res = []
        left = 0
        right = len(matrix[0])
        top = 0
        bottom = len(matrix)
        if not (right or bottom):
            return res
        while left < right and top < bottom:
            for i in range(left, right):
                res.append(matrix[top][i])
            top += 1
            for i in range(top, bottom):
                res.append(matrix[i][right -1 ])
            right -= 1
            if top != bottom:
                for i in range(right - 1, left - 1, -1):
                    res.append(matrix[bottom - 1][i])
                bottom -= 1
            if left != right:
                for i in range(bottom - 1, top - 1, -1):
                    res.append(matrix[i][left])
                left += 1
        return res

 

你可能感兴趣的:(查找与排序)