剑指offer-python

面试题20:顺时针打印指针

2018-07-01  本文已影响0人  fighting_css

【题目描述】
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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
【思路】
将矩阵想象成一个一个环,n表示环数,依次从左至右、从上至下、从右至左,从下自上而下遍历。
【代码】

class Solution:
    # matrix类型为二维列表,需要返回列表
    def printMatrix(self, matrix):
        # write code here
        row = len(matrix)
        res = []
        if row == 0:
            return res
        col = len(matrix[0])
        if col ==1:
            for j in range(row):
                res.append(matrix[j][0])
            return res
        #记录环数
        n = min(row/2,col/2)
        m = row%2 and col%2
        for i in range(n):
            #从左自右
            res_temp = matrix[i][i:col-i]
            #从上至下
            for j in range(i+1,row-i):
                res_temp.append(matrix[j][col-i-1])
            #从右至左
            for j in range(col-i-2,i-1,-1):
                res_temp.append(matrix[row-i-1][j])
            #从下至上
            for j in range(row-i-2,i,-1):
                res_temp.append(matrix[j][i])
            res = res+res_temp
        #m==1,说明还有一行空余
        if m ==1:
            res += matrix[n][row-n-1:col-n]
        return res
上一篇 下一篇

猜你喜欢

热点阅读