《剑指offer》---顺时针打印矩阵
本文算法使用python3实现
1. 问题1
1.1 题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
输入矩阵为 $$ \begin{bmatrix} 1 & 2 & 3 & 4 \ 5 & 6 & 7 & 8 \ 9 & 10 & 11 & 12 \ 13 & 14 & 15 & 16 \ \end{bmatrix} $$
输出为1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10
时间限制:1s;空间限制:32768K
1.2 思路描述:
(1)将矩阵第一行加入result中,同时删除第一行。
(2)对剩余矩阵进行逆时针旋转90度,继续取其第一行
(3)直到矩阵被删除为空为止。
1.3 程序代码:
class Solution:
def printMatrix(self, matrix):
# 每次将矩阵第一行加入result列表
result = []
while matrix:
result += matrix.pop(0)
if not matrix :
break
matrix = self.turnMatrix(matrix)
return result
def turnMatrix(self, matrix):
# 对矩阵进行逆时针旋转90度操作
rows = len(matrix)
cols = len(matrix[0])
resMatrix = []
for j in range(cols):
temp = []
for i in range(rows):
temp.append(matrix[i][j])
resMatrix.append(temp)
resMatrix.reverse()
return resMatrix
2. 问题2
2.1 题目描述:
顺时针旋转填充数组。
输入为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
输出矩阵为 $$ \begin{bmatrix} 1 & 2 & 3 & 4 \ 12 & 13 & 14 & 5 \ 11 & 16 & 15 & 6 \ 10 & 9 & 8 & 7 \ \end{bmatrix} $$
时间限制:1s;空间限制:32768K
2.2 思路描述:
(1)给一个 $ m \times n $ 的矩阵,和矩阵的开始坐标 $ x、y $,顺序填充该矩阵的最外围边缘。
(2)不断缩小矩阵的规模(每次高度和长度各减少2),直到 $ m $ 和 $ n $ 有一个为0,则说明该填充结束。
(3)当 $ m < n $ 时,最后一次剩余的不再是一个矩阵,而是一行,需要单独定义如何填充。
\]
(4)当 $ m > n $ 时,最后一次剩余的不再是一个矩阵,而是一列,同样也需要单独定义如何填充。
\]
2.3 程序代码:
class Solution():
def FillMatrix(self, m, n, count):
# 创建 m*n的列表
matrix = [[0]*n for i in range(m)]
x = 0; y = 0; cnt =1
while m>0 and n>0:
if m == 1:
for k in range(y, y+n):
matrix[x][k] = cnt
cnt += 1
break
if n == 1:
for k in range(x, x+m):
matrix[k][y] = cnt
cnt += 1
break
matrix, cnt = self.FillEdge(x, y, m, n, cnt, matrix)
x += 1
y += 1
m -= 2
n -= 2
return matrix
def FillEdge(self, x, y, m, n, cnt, matrix):
i = x; j = y
while j < y+n-1:
matrix[i][j] = cnt
j += 1
cnt += 1
while i < x+m-1:
matrix[i][j] = cnt
i += 1
cnt += 1
while j > y:
matrix[i][j] = cnt
j -= 1
cnt += 1
while i > x:
matrix[i][j] = cnt
i -= 1
cnt += 1
return matrix, cnt
《剑指offer》---顺时针打印矩阵的更多相关文章
- 剑指offer - 顺时针打印矩阵 - JavaScript
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下 4 X 4 矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印 ...
- 剑指Offer 顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...
- 剑指OFFER——顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8 ...
- 剑指Offer顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...
- 剑指Offer_Java_顺时针打印矩阵(二维数组)
顺(逆)时针打印矩阵 算法思想: 简单来说,就是不断地收缩矩阵的边界 定义四个变量代表范围,up(初始0).down(初始-行高).left(初始-0).right(初始-列宽), 向右走存入整行的值 ...
- 剑指Offer-19.顺时针打印矩阵(C++/Java)
题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字 ...
- 剑指offer--26.顺时针打印矩阵
1,2,3,45,6,7,88,10,11,1213,14,15,16 每次输出第一行,然后删除第一行,逆时针旋转剩下的矩阵. ------------------------------------ ...
- python剑指offer 顺时针打印指针
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...
- 用js刷剑指offer(顺时针打印数组)
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...
- 剑指Offer18 顺时针打印矩阵
/************************************************************************* > File Name: 18_PrintM ...
随机推荐
- day 10 函数的进阶
动态传参 (重点) * ** 形参 * args在形参位置, *表示不定参数--接受的是位置参数 接受到的位置参数的动态传参: 都是元组 形参的顺序: 位置 *args 默认值 * ...
- 前端css之float浮动
浮动的准则,先找前一个块标签,在确认有否清除浮动的条件或者是距离的情况下,如果这一行能摆得下,就继续紧贴前一个标签 如果摆不下,就会另起一行 浮动只有左边和右边 如果是块标签,设置浮动,先把displ ...
- python学习笔记:第14天 内置函数补充和递归
一.匿名函数 匿名函数主要是为了解决一些简单需求而设计的一种函数,匿名函数的语法为: lambda 形参: 返回值 先来看一个例子: # 计算n的n次方 In[2]: lst = lambda n: ...
- 安装 RobotFramework 可视化工具 RIDE
1. 概述 robot framework 的安装 可视化工具 ride 的安装 2. 准备 安装缘由 来自一本书 书名: Robot Framework自动化测试修炼宝典 豆瓣上有好评不少, 坏评也 ...
- JavaScript基础part1
JavaScript介绍 你不知道它是什么就学?这就是一个网页嵌入式脚本语言...仅此而已 JavaScript组成 一个完整的 JavaScript 实现是由以下 3 个不同部分组成的: 核心(EC ...
- PHP.50-TP框架商城应用实例-前台2-商品推荐
商品推荐 {抢购,新品,精品,热卖}效果如下 1.在商品表增加促销价格与促销起始时间和结束时间三个字段,字段推荐楼层与排序在后面用到 注意:在增加datetime类型字段时,要添加默认值{datet ...
- 成都Uber优步司机奖励政策(2月24日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- Hadoop: Text类和String类的比较
一般认为Text类和String类是等价的,但二者之间其实存在着不小差别: 以<Hadoop权威指南>中的案例为例,给定字符串 String s = "\u0041\u00DF ...
- CLR via #C读书笔记三:基元类型、引用类型和值类型
1.一些开发人员说应用程序在32位操作系统上运行,int代表32位整数:在64位操作系统上运行,int代表64位整数.这个说法是完全错误的.C#的int始终映射到System.Int32,所以不管在什 ...
- springBoot 自定义redisTemplate
package com.atirm.mybatismutiplesource.config.RedisConfig; import com.atirm.mybatismutiplesource.ent ...