《剑指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 ...
随机推荐
- java 整型数据转换为小数类型 BigDecimal 装换为Double
A,B为String类型 ,A-B=C BigDecimal A=(BigDecimal) map.get("A"); BigDecimal B=(BigDecimal) map. ...
- Python入门 —— 06语音识别
Python 语音 实现语音操控的原理 语音操控分为语音识别和语音朗读两部分 我们使用speech模块实现语音模块(python 2.7) SAPI是微软Speech API , 是微软公司推出的语音 ...
- mysql 优化(索引)
表 collect 字段 id(int 自增),title(varchar),info(text),vtype(int) 表中数据130w: select * from collect whe ...
- 初学者:__init__.py文件的作用
__init__.py 文件的作用及意义 __init__.py文件是一个包必须的文件,即使它是空的,但也是必须的,如果没有这个文件,python将不会把该文件夹当做一个package,而仅仅是一个d ...
- Gitlab 自动构建心得
上面是简单接受一下gitlab ci的工作原理 GitLab-CI 这个是一套配合GitLab使用的持续集成系统,是GitLab自带的,也就是你装GitLab的那台服务器上就带有的.无需多考虑..gi ...
- ruby 反射机制常用方法
1. 获取类的名称: .class 2. 获取超类的名称:.superclass 3. 获取类包含的模块:.class.included_modules 4. 检查是否为实例对象:.instance_ ...
- Leecode刷题之旅-C语言/python-203移除链表元素
/* * @lc app=leetcode.cn id=203 lang=c * * [203] 移除链表元素 * * https://leetcode-cn.com/problems/remove- ...
- IA64与x86-64的区别
win7 sp1下载地址:https://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/wind ...
- 修改注册表删除Windows资源管理器 “通过QQ发送” 右键菜单项
运行regedit 展开至:HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers 删除QQShellExt项
- C#、C++、Java、Python 选择哪个好?
C#.C++.Java.Python 选择哪个好? 2019年03月06日 16:54:34 编程小火车 阅读数:214 首先排除Python,光动态语言一个理由,就已经万劫不复了.无论有多少所谓 ...