题目描述

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

时间限制:1秒;空间限制:32768K;本题知识点:数组

解题思路

思路一

常规思路,将一次循环分为4步:从左到右、从上到下、从右到左、从下到上,注意避免重复,每次循环后判断剩余矩阵是否还能继续这样分4步打印,否则直接停止(行列数相同的情况)或打印一行后停止(列数大于行数的情况)或打印一列后停止(行数大于列数的情况)。

Python代码:

# -*- coding:utf-8 -*-
class Solution:# matrix类型为二维列表,需要返回列表def printMatrix(self, matrix):# write code herel = []row = len(matrix)column = len(matrix[0])xy = 0#起点坐标while True:# 结束条件if xy == row//2:# 需要从上到下再打印一列if row%2 == 1:for i in range(xy,column-xy):l.append(matrix[xy][i])breakif xy == column//2:# 需要从左到右再打印一行if column%2 == 1:for i in range(xy,row-xy):l.append(matrix[i][xy])break#1 从左到右打印一整行for i in range(xy,column-xy):l.append(matrix[xy][i])#2 从上到下打印一列,上下各少1个防止重复for i in range(xy+1,row-xy-1):l.append(matrix[i][column-xy-1])#3 从右到左打印一整行for i in range(column-xy,xy,-1): #注意反向的写法,步长-1,用的时候i再-1l.append(matrix[row-1-xy][i-1])#4 从下到上打印一列,上下各少1个防止重复for i in range(row-xy-1,xy+1,-1):l.append(matrix[i-1][xy])# 循环xy += 1return l

思路二

利用矩阵旋转的思路,每次取出第一行,然后将矩阵逆时针旋转。

# -*- coding:utf-8 -*-
class Solution:# matrix类型为二维列表,需要返回列表def printMatrix(self, matrix):result = []while len(matrix) > 0:result += matrix[0]matrix = list(zip(*matrix[1:])) #矩阵转置matrix = matrix[::-1] #倒序return result

转载于:https://www.cnblogs.com/yucen/p/9912045.html

【剑指Offer】15顺时针打印矩阵相关推荐

  1. 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java

    <LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...

  2. 【剑指offer】顺时针打印矩阵

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上測试通过. 题目描写叙述: 输入一个矩 ...

  3. 打印矩阵 java_【Java】 剑指offer(29) 顺时针打印矩阵

    本文参考自<剑指offer>一书,代码采用Java语言. 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 思路 每次打印矩阵最外面的一圈(用方法printMatrix ...

  4. 剑指offer:顺时针打印矩阵

    题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1 ...

  5. 剑指 Offer 29. 顺时针打印矩阵

    题目 剑指offer的解题思路 顺时针打印矩阵,可以分解为每次打印一个数,顺序是从左到右,从上到下,然后从右到左,从下到上. 打印每一圈的起点(startX,startY)分别为(0,0),(1,1) ...

  6. 【完整可运行代码】剑指 Offer 29. 顺时针打印矩阵

    立志用最少的代码做最高效的表达 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2, ...

  7. 剑指offer——29.顺时针打印矩阵(不熟)

    题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字 ...

  8. 剑指offer 29 顺时针打印矩阵(可逆时针,任一点开始)

    原书上写的解太麻烦了,而且还没有扩展性(比如从右上角开始打印,或者逆时针打印). 此外多个for循环的起止点也让人头晕,每个方向都要单独判断步进方向,因此代码也缺少优雅性. 这里我用direction ...

  9. 【leetcode】剑指 Offer 29. 顺时针打印矩阵(shun-shi-zhen-da-yin-ju-zhen-lcof)(模拟)[简单]

    链接 https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/ 耗时 解题:38 min 题解:10 min 题意 输入一 ...

  10. 剑指offer之顺时针打印矩阵

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...

最新文章

  1. java jxl map,jxl操作Excel
  2. nginx之rtmp模块引用计数设计
  3. java解析xml实例——获取天气信息
  4. JeeWx 商业版本最近新增什么功能啦?
  5. 【英语学习】【WOTD】bower 释义/词源/示例
  6. 断言(Assert)与异常(Exception)
  7. Java算法-快排序
  8. REST Assured 55 - JSON Schema Validation In Rest Assured
  9. 基于企业微信和钉钉的工资条发送工具 - 工资条帮
  10. 顺丰标准 150标准丰密面单 Clodop 实现打印
  11. 浪曦struts2学习笔记1
  12. 安恒明御TM数据库审计与风险控制系统指标
  13. openwrt-mt7628 wds配置
  14. 一元四次方程求解C++实现
  15. 创造与魔法怎么自建服务器,创造与魔法自建服攻略大全_创造与魔法自建服建造方法、福利_玩游戏网...
  16. 计算机专业支教,【计算机】梦缘·夏季支教志愿招募
  17. 【2022年法定工作日,周末,节假日类型使用Java存入sql】
  18. U盘Linux启动引导
  19. 清理电脑C盘全攻略 - 是时候给你的系统盘放个假了!
  20. 终于有人把区块链讲明白了

热门文章

  1. java mavenpom_java-使用pom-packaging Maven项目作为依赖项
  2. vue项目模板_VSCode( VisualStudioCode) 写vue项目一键生成.vue模版修改定义其他模板
  3. IO流之流的操作规律
  4. C++ 类中的静态成员变量,静态成员函数
  5. CentOS 设置网络(修改IP修改网关修改DNS)
  6. mount 远程挂载Nfs
  7. Lync Server 2010企业版系列PART7:部署前端
  8. linux查看硬件信息及驱动设备
  9. 配置sharepoint站点为Form认证(下)
  10. Xgboost通俗理解和总结