Python 旋转打印各种矩形的方法


Posted in Python onJuly 09, 2019

打印旋转矩阵应该是很经典的算法问题了。

题目描述如下:

给定一个m * n要素的矩阵。按照螺旋顺序,返回该矩阵的所有要素。

思路:1,先定义矩阵的左上和右下的坐标,然后通过两个坐标来打印这一圈矩阵;

2,将左上的坐标下右下移动,右下的坐标向左上移动,来缩小打印圈,进行下一圈矩阵的打印;

3,一直缩小打印直到结束。

代码:

def print_circle(matrix,up_hang,up_lie,down_hang,down_lie):
  result=[]
  
  if up_lie==down_hang and down_hang==down_lie: # 若只有一个元素
    result.append(matrix[up_hang][up_lie])
  elif up_lie==down_hang or up_lie==down_lie:  #若只有一行或一列元素
    if up_lie==down_hang:
      while up_lie <= down_lie:
        result.append(matrix[up_hang][up_lie])
        up_lie+=1
    elif up_lie==down_lie:
      while up_hang <=down_hang:
        result.append(matrix[up_hang][up_lie])
        up_hang+=1
# return result    #注意对齐方式,其决定了作用的区间范围,很关键    
    return result   
  i=up_hang
  j=up_lie
  while j<down_lie:
    result.append(matrix[i][j])
    j+=1
  while i<down_hang:
    result.append(matrix[i][j])
    i+=1
  while j>up_lie:
    result.append(matrix[i][j])
    j-=1
  while i>up_hang:
    result.append(matrix[i][j])
    i-=1
  return result

#matrix=[[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]]
#matrix=[[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]]
matrix=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
#matrix=[[1,2,3],[4,5,6],[7,8,9]]
#matrix=[[1,2],[3,4]]
re_mat=[]
up_hang=0
up_lie=0
down_hang=3
down_lie=3
if down_hang>down_lie:
  flag=down_lie
else:
  flag=down_hang
while flag!=0:       #flag决定了一个矩阵需要打印多少圈
  temp=print_circle(matrix,up_hang,up_lie,down_hang,down_lie)
  re_mat.extend(temp)
  up_hang+=1
  up_lie+=1
  down_hang-=1
  down_lie-=1
  flag=flag/2
print(re_mat)

总结:python对于代码的对齐方式要求的比较严格,对齐方式直接决定了函数或者判断条件的作用域,要重视啊。

以上这篇Python 旋转打印各种矩形的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 文件和输入输出小结
Oct 09 Python
python元组操作实例解析
Sep 23 Python
Python的Bottle框架的一些使用技巧介绍
Apr 08 Python
Python使用flask框架操作sqlite3的两种方式
Jan 31 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
对Python w和w+权限的区别详解
Jan 23 Python
python下载微信公众号相关文章
Feb 26 Python
python面向对象 反射原理解析
Aug 12 Python
Python爬虫爬取电影票房数据及图表展示操作示例
Mar 27 Python
python3.6使用SMTP协议发送邮件
May 20 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
Nov 27 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 #Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 #Python
Python3 执行系统命令并获取实时回显功能
Jul 09 #Python
利用python开发app实战的方法
Jul 09 #Python
python设置环境变量的作用和实例
Jul 09 #Python
python版百度语音识别功能
Jul 09 #Python
利用Python实现Shp格式向GeoJSON的转换方法
Jul 09 #Python
You might like
咖啡的植物学知识
2021/03/03 咖啡文化
php daodb插入、更新与删除数据
2009/03/19 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
论坛特效代码收集(落伍转发-不错)
2006/12/02 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
谈谈JS中的!!
2017/12/07 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
vue 解决循环引用组件报错的问题
2018/09/06 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
[00:31]DOTA2上海特级锦标赛 Fnatic战队宣传片
2016/03/04 DOTA
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
Python使用Scrapy爬取妹子图
2015/05/28 Python
python 表达式和语句及for、while循环练习实例
2017/07/07 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
在家更换处方镜片:Lensabl
2019/05/01 全球购物
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
新加坡第一大健康与美容零售商:屈臣氏新加坡(Watsons Singapore)
2020/12/11 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
个人对照检查剖析材料
2014/10/13 职场文书
四年级小学生评语
2014/12/26 职场文书
给老婆的检讨书(搞笑版)
2015/05/06 职场文书
离婚答辩状范文
2015/05/22 职场文书
公司档案管理制度
2015/08/05 职场文书
python flask框架快速入门
2021/05/14 Python
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
深入浅析Django MTV模式
2021/09/04 Python
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript