Python一行代码解决矩阵旋转的问题
作者:Jason_Bourne_ 发布时间:2022-03-08 12:44:11
标签:Python,矩阵,旋转
今天刷《剑指offer》的时候碰到这样一道题:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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 2 3
4 5 6
7 8 9
利用pop输出并且删除第一行后,再进行一次逆时针旋转,就变成:
6 9
5 8
4 7
然后,继续重复上述操作即可。
最主要的在于实现矩阵的逆时针操作。关于矩阵的旋转有好几种,转置、顺时针、逆时针,下面直接上代码,用一行python代码实现这三种操作。
矩阵转置:
matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix = map(list, zip(*matrix))
print(matrix)
>>>[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
矩阵顺时针旋转:先把矩阵上下翻转,然后在转置一下
matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix[:] = map(list,zip(*matrix[::-1]))
print(matrix)
>>>[[7, 4, 1], [8, 5, 2], [9, 6, 3]]
矩阵逆时针旋转:先把矩阵转置一下,然后在上下翻转
matrix = [[1,2,3], [4,5,6], [7,8,9]]
matrix[:] = map(list,zip(*matrix))[::-1]
print(matrix)
>>>[[3, 6, 9], [2, 5, 8], [1, 4, 7]]
下面是完整的解题代码:
# -*- coding:utf-8 -*-
class Solution:
# matrix类型为二维列表,需要返回列表
def printMatrix(self, matrix):
# write code here
result = []
while(matrix):
result += matrix.pop(0)
if not matrix or not matrix[0]:
break
# 将矩阵逆时针旋转
matrix[:] = map(list, zip(*matrix))[::-1]
return result
来源:https://blog.csdn.net/Sun_Hui_/article/details/81298544


猜你喜欢
- 本文实例讲述了Yii配置与使用memcached缓存的方法。分享给大家供大家参考,具体如下:1. 下载memcached软件包,解压,把me
- 对于python的tkinter库来说,如果需要弹出文件选择框,我们需要引入一下tkinter.filedialog包,让用户直观地先择一个
- # -*-coding:utf8 -*- ''' Python常见文件操作示例 os.path 模块中的路径名访问函
- 实现简单的多线程下载,需要关注如下几点:1.文件的大小:可以从reponse header中提取,如“Content-Length:911”
- 难道真的要我破解一个么?算了,正好试试我的Python水平。 python版 #coding: gbk import httplib, ur
- 1. js的数据类型1.1 js引入方式<!DOCTYPE html><html lang="en"&
- 问题:无法上传较大的文件“Request 对象 错误 'ASP 0104 : 80004005'”或者上传成功后,找不到文件
- 近期,阿里云云安全中心基于全新的深度威胁检测功能,监测到云上部分用户的 SQL Server 数据库内部隐藏着一种新型的持久化后门程序。攻击
- 先给大家介绍下sqlserver给表添加新字段、给表和字段添加备注、更新备注及查询备注,代码如下所示:-- 添加新字段及字段备注的语法USE
- 字符串在 Python 中创建字符串对象非常容易。只要将所需的文本放入一对引号中,就完成了一个新字符串的创建(参见清单 1)。如果稍加思考的
- 从一个问题开始最近银行这个事情闹的比较厉害啊,很多储户的钱放在银行,就不翼而飞了,而银行还不管不问,说是用户的责任,打官司,用户还能输了,这
- Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9i中新增了按照拼音、部首、笔画排序功能。 1、
- 准备工具pip3 install PILpip3 install opencv-pythonpip3 install numpy谷歌驱动建议
- 这个我早就改好了一直没有放上来.现在发给大家用用注意这几个变量它们影响到提示框的效果代码:var rT=true;//允许图像过渡
- 前言数学建模的介绍与作用全国大学生数学建模竞赛:全国大学生数学建模竞赛创办于1992年,每年一届,已成为全国高校规模最大的基础性学科竞赛,也
- 打桩测试当我们在编写单元测试的时候,有时我们非常想 mock 掉其中一个方法,但是这个方法又没有接口去定义和实现(无法用 gith
- 首先,eval模式和train模式得到不同的结果是正常的。我的模型中,eval模式和train模式不同之处在于Batch Normaliza
- 1、Python函数函数是Python为了代码最大程度的重用和最小化代码冗余而提供的基本程序结构,用于将相关功能打包并参数化Python中可
- 很久没用sqlserver了,今天想打开sqlserver,导入数据做一下数据分析,但当我打开sqlserver工具后连接数据库后,居然报错
- 一、软件测试大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必须要有相应的质量保证活动,而软件