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 相关文章推荐
在Linux命令行终端中使用python的简单方法(推荐)
Jan 23 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
对Python中数组的几种使用方法总结
Jun 28 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
Python3.4 splinter(模拟填写表单)使用方法
Oct 13 Python
django如何自己创建一个中间件
Jul 24 Python
Python 中使用 PyMySQL模块操作数据库的方法
Nov 10 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
python框架flask入门之路由及简单实现方法
Jun 07 Python
Python 字符串池化的前提
Jul 03 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
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
php的hash算法介绍
2014/02/13 PHP
php无限遍历文件夹示例分享
2014/03/04 PHP
如何使用GDB调试PHP程序
2015/12/08 PHP
PHP框架性能测试报告
2016/05/08 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
vue无限轮播插件代码实例
2019/05/10 Javascript
python提示No module named images的解决方法
2014/09/29 Python
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
Python连接mysql数据库的正确姿势
2016/02/03 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
Django中提示消息messages的设置方式
2019/11/15 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
高中军训感言400字
2014/02/24 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
tree shaking对打包体积优化及作用
2022/07/07 Java/Android