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获取脚本所在目录的正确方法
Apr 15 Python
独特的python循环语句
Nov 20 Python
Python使用Phantomjs截屏网页的方法
May 17 Python
python模块smtplib学习
May 22 Python
使用python将大量数据导出到Excel中的小技巧分享
Jun 14 Python
python pygame实现2048游戏
Nov 20 Python
python写入文件自动换行问题的方法
Jul 05 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 Python
python定间隔取点(np.linspace)的实现
Nov 27 Python
python烟花效果的代码实例
Feb 25 Python
PyQt5中QSpinBox计数器的实现
Jan 18 Python
opencv-python图像配准(匹配和叠加)的实现
Jun 23 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
php学习之 数组声明
2011/06/09 PHP
php字符串过滤与替换小结
2015/01/26 PHP
php支付宝在线支付接口开发教程
2016/09/19 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
firefox火狐浏览器与与ie兼容的2个问题总结
2010/07/20 Javascript
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
一个JavaScript处理textarea中的字符成每一行实例
2014/09/22 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
详解AngularJS控制器的使用
2016/03/09 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
[48:12]Secret vs Optic Supermajor 胜者组 BO3 第三场 6.4
2018/06/05 DOTA
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
小学亲子活动总结
2014/07/01 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
2015年售后服务工作总结
2015/04/25 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
开业典礼致辞
2015/07/29 职场文书
公司开业的祝贺语大全(60条)
2019/07/05 职场文书
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS