关于输出螺旋矩阵的demo
输出类似
1 2 3
8 9 4
7 6 5
主要难点是如何找到表示的算法
我的理解是,先生成一个n*n的矩阵,然后再往里面塞数字,而塞的方法分别有四种:由左往右,由上往下,由右往左,由下往上,没塞完的话就继续循环这四步
一开始让我想算法我是拒绝的,所以我用了笨方法,就是手写了前几次生成逻辑,试图找出其中规律,幸好这个并不难,写了两轮就找到了其中规律,但是,但是,但是,现在的我还不会用自然语言将其描述出来,只能写成逻辑表示,这个希望日后会回来填坑。
还有在推的过程发现了另外一个规律,就是无论n多大,都是只需要2n - 1步就可以把数字塞完。
# -*- coding:utf-8 -*- def ppstr(i):
return str(i).center(5, ' ') def luoxuanboom(n=None):
if n == None:
n = 10
final = []
for _ in range(n):
final.append([''] * n) # 生成一个n*n的矩阵 num_list = list(map(ppstr, list(range(1, n**2 + 1)))) # 生成数组
num_id = 0 px, py = 0, 1
times = 0
while True:
for i in range(px, n-px): # 由左往右塞数字
final[px][i] = num_list[num_id]
num_id += 1 times += 1 # 方便统计塞的次数
if num_id == len(num_list): # 判断是否已经塞完了
break for i in range(py, n-px): # 由上往下
final[i][n-py] = num_list[num_id]
num_id += 1 times += 1
if num_id == len(num_list):
break for i in range(n-(py+1), px-1, -1): # 由右往左
final[n-py][i] = num_list[num_id]
num_id += 1 times += 1
if num_id == len(num_list):
break for i in range(n-(py+1), py-1, -1): # 由下往上
final[i][px] = num_list[num_id]
num_id += 1 times += 1
if num_id == len(num_list):
break px += 1
py += 1 for bb in final:
print(' '.join(bb))
print('times:', times) if __name__ == '__main__':
luoxuanboom()
关于输出螺旋矩阵的demo的更多相关文章
- 使用 JS 输出螺旋矩阵
关于螺旋矩阵 这是我曾经遇到过的面试题,在 LeetCode 上找到了题目的原型,难度中等.题目描述如下: 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中 ...
- PAT 1050. 螺旋矩阵(25)
本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条 ...
- PAT-乙级-1050. 螺旋矩阵(25)
1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求将给定的N个正整数按非递增的 ...
- PAT 1050 螺旋矩阵(25)(代码)
1050 螺旋矩阵(25)(25 分) 本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方 ...
- PAT B1050 螺旋矩阵 (25 分)
本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N:m ...
- 1050. 螺旋矩阵(25) pat乙级题
本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m- ...
- PAT——1050. 螺旋矩阵
本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为m行n列,满足条件:m*n等于N:m>=n:且m- ...
- 【算法笔记】B1050 螺旋矩阵
1050 螺旋矩阵 (25 分) 本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行 ...
- PAT 1050 螺旋矩阵
https://pintia.cn/problem-sets/994805260223102976/problems/994805275146436608 本题要求将给定的 N 个正整数按非递增的顺序 ...
随机推荐
- python Flask post 数据 输出
#!/usr/bin/env python # -*- coding: utf-8 -*- from flask import Flask from flask import request from ...
- JMS之——ActiveMQ时抛出的错误Could not connect to broker URL-使用线程池解决高并发连接
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/69046395 解决使用activemq时抛出的异常:javax.j ms.JMSE ...
- CSS3 Day1 练习
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Javascript摸拟自由落体与上抛运动 说明!
JavaScript 代码 //**************************************** //名称:Javascript摸拟自由落体与上抛运动! //作者:Gloot //邮箱 ...
- vb 中recordset提示对象关闭时不允许操作
vb中执行查询后,一般要判断是否为空,只要执行的查询执行了select,都可以用rs.eof 或者 rs.recordcount来判断, 但是,如果执行的sql中加了逻辑判断,导致没有执行任何sele ...
- vim命令学习
文本编辑器vim vim常用操作 vim是一个强大的全屏幕文本编辑器,是Linux上最常用的文本编辑器,它的作用是建立,编辑,显示文本文件. vim没有菜单,只有命令. 输入a或i或o进入编辑命令,下 ...
- C# Json To Object 无废话
json字符串如下: { success : 0, errorMsg : "错误消息", data : { total : "总记录数", rows : [ { ...
- python3.3中print换行
python 3.3版本中的print默认有个换行的操作 如: for i in range(5): print(i) 结果为: 01234 如果不想换行,需要用到print函数的end参数,pri ...
- Qt 数字和字符处理总结
1. 四舍五入保留小数几位 QString str="12.3456789"; double d1=str.toDouble(); qDebug()<<"d1 ...
- com.alibaba.fastjson.JSONException: autoType is not support.
解决办法:https://github.com/alibaba/fastjson/wiki/enable_autotype 文摘如下: 一.添加autotype白名单 添加白名单有三种方式,三选一,如 ...