当前位置: 首页 > news >正文

【算法笔记】螺旋矩阵

⚙️ 基本设定

1. 规则描述

  • 生成一个包含 n 个数字,m 行的矩阵。
  • 从 1 开始,由左上角顺时针螺旋向内排列。
  • 每行数字个数相等,尽可能减少列的数量。
  • 数字不够时使用 * 填充。

2. 输入描述

输入两个整数,依次表示 n 和 m。

3. 输出描述

举例输入:9 4 1 2 3 * * 4 9 * 5 8 7 6

🔎 重点解析

1. 列表推导式

list=[expressionforiteminiterableifcondition]

expression表达式计算后的值便是list的每一个元素,一般是对从可迭代对象iterable中取出来的item进行操作。

# 计算列数,必须向上取整保证可以存完cols=Math.ceil(k/n)# 初始化矩阵matrix=[["*"for_inrange(cols)]for_inrange(n)]

有两层推导式:

  • 外层[... for _ in range(n)]:创建n行。
  • 内层["*" for _ in range(cols)]:每列用"*"填充。
  • _是一个合法变量名,一般表示这个值本身只是个占位符,不会被使用,作用域不同两个_也不会冲突,这里用于迭代填入相同的符号"*"

2. 主逻辑算法

填数算法的核心分为持续填充改变方向两部分,基于方向控制器用相邻的两个元素控制。

  1. 方向控制器directions = [0, 1, 0, -1, 0]
    • 右:x 不变,y 加 1,对应[0, 1]
    • 下:x 加 1,y 不变,对应[1, 0]
    • 左:x 不变,y 减 1,对应[0, -1]
    • 上:x 减 1,y 不变,对应[-1, 0]
  2. 持续填充:
new_x=start_x+directions[index]new_y=start_y+directions[index+1]

控制index的值就可以改变相邻的一对值,实现方向控制。例如,index = 0时,directions[index]directions[index + 1]构成[0, 1],此时new_x不变,new_y加 1,实现向右移动。
3. 改变方向:
new_xnew_y先驱指针

if(new_x<0ornew_x>=nornew_y<0ornew_y>=Math.ceil(k/n)ormatrix[new_x][new_y]!="*"):
  • 改变方向就是改变index的值,螺旋矩阵是右下左上轮回,根据条件判断,需要改变的时候就改变index
  • 下标从 0 开始,所以=行数或列数时,也是越界。
index=(index+1)%4

index在 0 - 3 之间循环。

start_x=start_x+directions[index]start_y=start_y+directions[index+1]

此时new_xnew_y是越界状态,要用start_xstart_y拐弯。

3. 输出

  1. 手动
foriinrange(n):output_str=""forjinrange(cols):output_str+=matrix[i][j]# 除了每行最后一个,每个数后面都要加空格if(j!=(cols):output_str+=" "print(output_str)
  1. 简化
foriinrange(n):print(" ".join(matrix[i][:cols]))
  • matrix[i]:获取一行;
  • [:cols]:获取前cols个数;
  • " ".join(...):把只包含字符串的可迭代对象中的字符串按照指定分隔符拼接起来。

4. 切片 (Slice) 语法糖

语法形式描述示例 (lst = [0,1,2,3,4,5])结果
seq[start:stop]startstop-1的元素 (包含开头,不包含结尾)lst[2:5][2, 3, 4]
seq[start:]start到序列末尾的所有元素lst[3:][3, 4, 5]
seq[:stop]从序列开头到stop-1的元素lst[:4][0, 1, 2, 3]
seq[:]整个序列的浅拷贝lst[:][0,1,2,3,4,5]
seq[start:stop:step]startstop-1,按步长step选取元素lst[1:5:2][1, 3]
seq[::step]按步长step选取整个序列的元素lst[::2][0, 2, 4]
seq[::-1]步长为负时,反向选取元素 (常用于反转序列)lst[::-1][5,4,3,2,1,0]
seq[-n:]最后n个元素lst[-3:][3, 4, 5]
seq[:-n]除最后n个元素外的所有元素lst[:-2][0, 1, 2, 3]
seq[start:stop:-step]步长为负时,从startstop反向选取 (需注意索引方向)lst[4:1:-1][4, 3, 2]

💻 代码实现

importmathasMath# 方向控制器directions=[0,1,0,-1,0]# 列表推导式,输入总数和行数params=[int(x)forxininput().split(" ")]k=params[0]# 总数n=params[1]# 行数cols=Math.ceil(k/n)# 列数# 初始化矩阵,用 * 填充所有位置matrix=[["*"for_inrange(cols)]for_inrange(n)]start_x=0# 行索引start_y=0# 列索引count=1# 当前数字,从 1 开始index=0# 用于确定方向的索引while(True):if(count>k):breakelse:# --- 持续填充 --- #matrix[start_x][start_y]=str(count)# 实则是存放列表的列表,str 类型方便最后拼接字符count+=1new_x=start_x+directions[index]new_y=start_y+directions[index+1]# --- 改变方向 --- ## 分别规定上边界、下边界、左边界、右边界,最后检查是否已经填充数字if(new_x<0ornew_x>=nornew_y<0ornew_y>=colsormatrix[new_x][new_y]!="*"):index=(index+1)%4start_x=start_x+directions[index]start_y=start_y+directions[index+1]else:start_x=new_x start_y=new_yforiinrange(n):print(" ".join(matrix[i][:cols]))
http://www.jsqmd.com/news/580865/

相关文章:

  • 什么是数字营销?如何选?B2B数字营销系统推荐 - 纷享销客智能型CRM
  • 支持豆包平台优化的GEO服务商:传声港新媒体平台赋能企业2026内容营销新增长 - 博客湾
  • 2026年长沙足浴/SPA足浴/中式足浴/推拿足浴/高端足浴/足疗足浴品牌综合选购指南:和毅足道 - 2026年企业推荐榜
  • 实战应用:基于openclaw重启版本在快马平台构建电商价格监控系统
  • Phi-3-mini-4k-instruct-gguf开源镜像解析:微软轻量模型+GGUF+CUDA推理链
  • DriverStore Explorer完整指南:彻底清理Windows驱动垃圾,释放宝贵磁盘空间
  • Qwen3-14B镜像标准化交付:符合OCI规范,支持Harbor私有仓库托管
  • DolphinScheduler 作业架构
  • 大模型落地必看!手把手教你构建高效RAG知识库,秒杀90%团队避坑指南!
  • 2026 年国内变电站实力企业汇总 适配多场景电力配套项目选型参考 - 深度智识库
  • 2026年4月最新劳力士官方售后服务中心网点考察报告(新址) - 亨得利官方服务中心
  • 文件格式伪装终极指南:使用apate轻松突破文件限制
  • 基于深度学习YOLOv8+Pyqt5的混凝土裂缝检测识别系统 YOLOV8模型如何训练混凝土裂缝检测数据集 YOLO数据集
  • Llama-3.2V-11B-cot 环境配置详解:Anaconda创建独立Python环境避坑指南
  • Wan2.2-I2V-A14B创新应用:IP形象动态化+数字人视频生成私有化实践
  • 新手入门:借助快马平台零代码制作智能应用阻止解除指南工具
  • 闲置永辉购物卡别浪费!居家过日子的省钱小妙招 - 团团收购物卡回收
  • 2026年4月东胜区汽车贴膜品牌,防水防污,清洁维护轻松简单 - 品牌推荐师
  • 3个突破让你自由掌控数字阅读:fanqienovel-downloader全攻略
  • 2026 标签定制厂家怎么选?不干胶标签 / 防伪标签 / 可变码标签服务商测评与采购指南 - 深度智识库
  • 开源像素极光引擎部署教程:一键启动Diffusion像素艺术生成环境
  • 2026年地震与地质灾害防治国际学术会议(EGDP 2026)
  • 2026年C型扣板机高效解决方案厂家排名,佛山飞杨精密机械上榜 - 工业推荐榜
  • 2026年短视频代运营机构推荐分析,评价高的短视频代运营技术引领与行业解决方案解析 - 品牌推荐师
  • AI大模型应用开发:AI大模型学习路线,大模型方案解决专家,看这篇就够了
  • 终极文档下载神器:一键获取全网免费文档的完整指南
  • 3个技巧教你突破限制:开源工具cursor-free-vip实现Cursor Pro无限制使用指南
  • 把毕业论文写成一场通关游戏:好写作AI解锁的五个“学术技能”
  • 什么是B2B数字营销?企业线上获客的四大核心场景与实战指南 - 纷享销客智能型CRM
  • 氯酸钠、氢氧化钠、次氯酸钠采购实战指南:看懂行业格局,认准合规服务商 - 深度智识库