剑指Offer(十九):顺时针打印矩阵

一、前言

本系列文章为《剑指Offer》刷题笔记。

刷题平台:牛客网

书籍下载:共享资源

二、题目

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

剑指Offer(十九):顺时针打印矩阵

则依次打印出数组:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。

1、思路

将结果存入vector数组,从左到右,再从上到下,再从右到左,最后从下到上遍历。

2、代码

C++:

Python2.7:

题目变型:

给定一个数字2,打印矩阵:

剑指Offer(十九):顺时针打印矩阵

给定一个数字3,打印矩阵:

剑指Offer(十九):顺时针打印矩阵

给定一个数字4,打印矩阵:

剑指Offer(十九):顺时针打印矩阵

Python:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# -*- coding:utf-8 -*-
 
def matrix(target):
    num = target * target
    left, right, top, bottom = 0, target-1, 0, target-1
    res = [ [0 for col in range(target)] for row in range(target)]
    each = 1
    while left <= right and top <= bottom and each <= num:
        for i in range(left, right+1):
            res[top][i] = each
            each += 1
        for i in range(top+1, bottom+1):
            res[i][right] = each
            each += 1
        if top != bottom:
            for i in range(left, right)[::-1]:
                res[bottom][i] = each
                each += 1
        if left != right and each <= num:
            for i in range(top+1, bottom)[::-1]:
                res[i][left] = each
                each += 1
        top += 1
        left += 1
        bottom -= 1
        right -= 1
    for i in range(len(res)):
        print("\t".join('%s' %id for id in res[i]))
 
if __name__ == '__main__':
    matrix(4)
posted @ 2019-07-03 10:43  天涯海角路  阅读(122)  评论(0)    收藏  举报