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轻量级ORM框架Peewee访问sqlite数据库的方法详解
Jul 20 Python
Python实现的弹球小游戏示例
Aug 01 Python
Django代码性能优化与Pycharm Profile使用详解
Aug 26 Python
Python 经典面试题 21 道【不可错过】
Sep 21 Python
python中的for循环
Sep 28 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
DJANGO-URL反向解析REVERSE实例讲解
Oct 25 Python
python+OpenCV实现车牌号码识别
Nov 08 Python
python将数组n等分的实例
Dec 02 Python
python小程序基于Jupyter实现天气查询的方法
Mar 27 Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 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
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
php页面消耗内存过大的处理办法
2013/03/18 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
2010/12/04 Javascript
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
类似php的js数组的in_array函数自定义方法
2013/12/27 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
javascript类型系统_正则表达式RegExp类型详解
2016/06/24 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
react build 后打包发布总结
2018/08/24 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
微信小程序实现左滑删除效果
2020/11/18 Javascript
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
详解如何减少python内存的消耗
2019/08/09 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
Python 私有化操作实例分析
2019/11/21 Python
用Python做一个久坐提醒小助手的示例代码
2020/02/10 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
毕业生自我鉴定范文
2013/11/08 职场文书
交警失职检讨书
2015/01/26 职场文书
Oracle创建只读账号的详细步骤
2021/06/07 Oracle
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js
Java使用jmeter进行压力测试
2021/07/09 Java/Android
Python如何将list中的string转换为int
2022/07/15 Ruby