zoukankan      html  css  js  c++  java
  • 顺时针打印矩阵

    题目:

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:

    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.

    思路:

    注意到是依照环打印矩阵的。所以可以定义环的左上角和右下角,确定环的位置,再依次打印。注意环在不停收缩。

    在这种思路下要注意两点:一个是环的上面一横和下面一横是否重复,一个是四条线的起点和重点是否重合。一不注意就容易写错。

    下面是代码:

    class Solution:
        # matrix类型为二维列表,需要返回列表
        def printMatrix(self, matrix):
            if not matrix:
                return
            row_num = len(matrix)
            col_num = len(matrix[0])
            mark, res = 0, []
            while 2 * mark < min(row_num, col_num):
                for cj in range(mark, col_num - mark):
                    res.append(matrix[mark][cj])
                for ri in range(mark + 1, row_num - mark):
                    res.append(matrix[ri][col_num - 1 - mark])
                if row_num - 1 - mark > mark:
                    for cj in range(col_num - 2 - mark, mark - 1, -1):
                        res.append(matrix[row_num - 1 - mark][cj])
                if col_num - 1 - mark > mark:
                    for ri in range(row_num -2 - mark, mark, -1):
                        res.append(matrix[ri][mark])
                mark += 1
            return res
  • 相关阅读:
    DAY 5 搜索
    DAY 4 基础算法
    P2114 [NOI2014]起床困难综合症
    UVA10140 Prime Distance
    day 2 DP专场
    DAY 3 数论专场
    day 2 下午 骑士 基环树+树形DP
    day 1 晚上 P2824 [HEOI2016/TJOI2016]排序 线段树
    帝国后台加网站地图
    手风琴效果
  • 原文地址:https://www.cnblogs.com/plank/p/9147689.html
Copyright © 2011-2022 走看看