2026-10-13:创建一个恰好有 K 条路径的网格图Ⅰ。用go语言,有 m、n、k 三个整数。请生成一个 m 行 n 列的字符矩阵,每个位置只能填“.”或“#”。其中“.”表示可以经过的格子,“#
2026-10-13创建一个恰好有 K 条路径的网格图Ⅰ。用go语言有 m、n、k 三个整数。请生成一个 m 行 n 列的字符矩阵每个位置只能填“.”或“#”。其中“.”表示可以经过的格子“#”表示不能经过的障碍。所谓有效路线是指从矩阵左上角出发最终到达右下角并且每一步只能向右或向下移动同时途经的所有格子都必须是“.”。要求从左上角到右下角的有效路线数量恰好为 k。请输出任意一个满足条件的矩阵如果不存在这样的矩阵则输出空数组。1 m, n 10。1 k 4。输入 m 2, n 3, k 2。输出 [“…”,“#…”]。解释从 (0, 0) 到 (1, 2) 恰好有 k 2 条有效路径(0, 0) → (0, 1) → (0, 2) → (1, 2)(0, 0) → (0, 1) → (1, 1) → (1, 2)题目来自力扣3988。一、代码分步骤描述1. 特判k 4 m 3 n 3如果输入恰好是m3, n3, k4代码直接返回一个预先写好的固定矩阵..# ... #..这个矩阵恰好有 4 条从左上到右下的有效路径。这是一个特殊情况因为一般构造逻辑可能无法直接生成恰好 4 条路径的 3x3 网格所以单独处理。2. 处理只有一行或只有一列的情况如果m 1或者n 1也就是网格只有一行或者只有一列从左上角到右下角只有唯一一条路径即一直向右或一直向下。因此路径数量只能是 1。如果k 1则不可能构造出恰好k条路径直接返回空数组。如果k 1则返回一个全部由.组成的网格。3. 判断是否可能构造如果m k并且n k也就是行数和列数都小于k代码认为无法构造出恰好k条路径直接返回空数组。这是因为后续的构造方法需要至少有k行或者至少有k列才能通过打通一行或一列来制造k条路径。4. 初始化全障碍网格创建一个m行n列的二维字节数组初始时所有格子都填#表示全部是障碍物。5. 打通第一列除最后一行外对于前m-1行也就是第0行到第m-2行将第一列列索引0设置为.。这样从左上角(0,0)开始可以沿着第一列一直向下走到倒数第二行(m-2,0)。注意最后一行暂时不处理因为最后一行稍后会全部打通。6. 打通最后一行将最后一行也就是第m-1行全部设置为.。这样从倒数第二行向下进入最后一行后可以沿着最后一行一直向右走到右下角(m-1,n-1)。此时网格的基本骨架是第一列从第 0 行到第 m-2 行都是.最后一行全部是.其他位置仍然是#。7. 根据列数与k的关系制造恰好k条路径接下来分两种情况情况 An k即列数至少为k将倒数第二行也就是第m-2行从第1列开始到第k-1列设置为.。由于第0列之前已经设置为.所以倒数第二行的前k列第0列到第k-1列全部都是.。这样从左上角沿第一列走到倒数第二行后可以在倒数第二行向右移动。在倒数第二行的前k个位置中的任意一个位置都可以向下进入最后一行然后沿最后一行向右到达终点。因此恰好产生k条有效路径。其他行除了第一列以外仍然是#所以不会产生额外的路径。情况 Bn k但根据前面的判断此时必有m k将第二列列索引1从第m-k行到第m-2行设置为.。注意最后一行已经是全.所以实际上从第m-k行到第m-1行第二列都是.。这样从左上角沿第一列向下走时可以在第m-k行到第m-1行之间的任意一行向右进入第二列然后继续向下走到最后一行再向右到达终点。一共有k行可以选择向右进入第二列因此恰好产生k条有效路径。其他行除了第一列和第二列被选中的位置外仍然是#不会增加额外路径。8. 转换为字符串数组返回最后将二维字节数组逐行转换为字符串每一行一个字符串组成字符串切片返回。二、针对输入m 2, n 3, k 2的实际执行过程按照代码逻辑不满足特判k 4 m 3 n 3。m ! 1且n ! 1。m k是2 2为假n k是3 2为假。所以不返回空数组。初始化2行3列全#### ###前m-1 1行即第0行第一列设为..## ###最后一行全部设为..## ...因为n k3 2所以设置倒数第二行第0行从第1列到第k-1 1列为.即第0行第1列设为...# ...转换为字符串数组返回[..#, ...]这个矩阵中从(0,0)到(1,2)的有效路径恰好有 2 条(0,0) - (0,1) - (1,1) - (1,2)(0,0) - (1,0) - (1,1) - (1,2)因此满足k 2的条件。题目示例给出的输出是[..., #..]这也是一个合法答案但代码实际生成的是[..#, ...]。两者都满足恰好 2 条路径题目要求返回任意一个即可。三、时间复杂度分析设网格大小为m行n列。特判常数时间O(1)。处理一行或一列需要生成m个长度为n的字符串时间复杂度O(m * n)。初始化二维数组并全部填#需要访问m * n个格子时间复杂度O(m * n)。打通第一列循环m-1次时间复杂度O(m)。打通最后一行循环n次时间复杂度O(n)。根据n与k的关系设置额外格子循环次数最多为k-1而k 4所以是常数时间O(1)。最后将二维数组转换为字符串数组需要遍历m行每行长度n时间复杂度O(m * n)。因此总时间复杂度为O(m * n)由于题目中m, n 10实际运行非常快。四、额外空间复杂度分析主要额外空间是二维字节数组a大小为m行n列占用O(m * n)空间。返回的字符串数组也需要O(m * n)空间来存储结果。其他变量如循环索引、临时变量等均为常数级。因此总额外空间复杂度为O(m * n)五、总结该函数通过“打通第一列 打通最后一行 在倒数第二行或第二列制造k个分支点”的方式构造出恰好k条有效路径的网格。对于无法构造的情况单行单列且k 1或者行列数都小于k返回空数组。整体时间复杂度和额外空间复杂度都是O(m * n)在题目约束下非常高效。Go完整代码如下packagemainimport(bytesfmtstrings)funccreateGrid(m,n,kint)[]string{// 特判ifk4m3n3{return[]string{..#,...,#..}}ifm1||n1{// 一行或一列只能有一种方案ifk1{returnnil}// 全为 .ans:make([]string,m)row:strings.Repeat(.,n)fori:rangeans{ans[i]row}returnans}// 至少要有 k 行或 k 列特殊情况上面已判断ifmknk{returnnil}// 初始全为 #a:make([][]byte,m)fori:rangem-1{a[i]bytes.Repeat([]byte{#},n)a[i][0].// 第一列全为 .}a[m-1]bytes.Repeat([]byte{.},n)// 最后一行全为 .ifnk{// 至少有 k 列// 倒数第二行开头 k 个 .forj:1;jk;j{a[m-2][j].}}else{// 至少有 k 行// 第二列末尾 k 个 .for_,row:rangea[m-k:m-1]{row[1].}}ans:make([]string,m)fori,row:rangea{ans[i]string(row)}returnans}funcmain(){m:2n:3k:2result:createGrid(m,n,k)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-defcreateGrid(m,n,k):# 特判ifk4andm3andn3:return[..#,...,#..]ifm1orn1:# 一行或一列只能有一种方案ifk1:return[]# 全为 .row.*nreturn[rowfor_inrange(m)]# 至少要有 k 行或 k 列特殊情况上面已判断ifmkandnk:return[]# 初始全为 #a[]foriinrange(m-1):row[#]*n row[0].# 第一列全为 .a.append(row)a.append([.]*n)# 最后一行全为 .ifnk:# 至少有 k 列# 倒数第二行开头 k 个 .forjinrange(1,k):a[m-2][j].else:# 至少有 k 行# 第二列末尾 k 个 .forrowina[m-k:m-1]:row[1].return[.join(row)forrowina]if__name____main__:m2n3k2resultcreateGrid(m,n,k)print(result)C完整代码如下#includeiostream#includevector#includestringusingnamespacestd;vectorstringcreateGrid(intm,intn,intk){// 特判if(k4m3n3){return{..#,...,#..};}if(m1||n1){// 一行或一列只能有一种方案if(k1){return{};}stringrow(n,.);returnvectorstring(m,row);}// 至少要有 k 行或 k 列特殊情况上面已判断if(mknk){return{};}// 初始全为 #vectorvectorchara(m,vectorchar(n,#));// 第一列除最后一行外设为 .for(inti0;im-1;i){a[i][0].;}// 最后一行全部设为 .for(intj0;jn;j){a[m-1][j].;}if(nk){// 至少有 k 列// 倒数第二行开头 k 个 .for(intj1;jk;j){a[m-2][j].;}}else{// 至少有 k 行// 第二列末尾 k 个 .for(intim-k;im-1;i){a[i][1].;}}vectorstringans;for(inti0;im;i){ans.push_back(string(a[i].begin(),a[i].end()));}returnans;}intmain(){intm2,n3,k2;vectorstringresultcreateGrid(m,n,k);for(conststringrow:result){coutrowendl;}return0;}

相关新闻

【Linux进程篇】Linux学习第十六弹——进程凭什么先跑?凭什么被换下?一文吃透优先级与进程切换!

【Linux进程篇】Linux学习第十六弹——进程凭什么先跑?凭什么被换下?一文吃透优先级与进程切换!

🎬 个人主页:MSTcheng CSDN 🌱 代码仓库 :MSTcheng Gitee 🔥 精选专栏: 《C语言》《数据结构》 《算法学习》 《C由浅入深》《Linux操作系统》《Mysql数据库》《白话大模型》💬座右铭: 路虽远…

2026/10/14 21:19:59 阅读更多 →
【开源一页纸|L3静态审计】xet-core:HuggingFace 基于Rust的大模型海量文件版本存储内核

【开源一页纸|L3静态审计】xet-core:HuggingFace 基于Rust的大模型海量文件版本存储内核

【开源一页纸|L3静态审计】xet-core:HuggingFace 基于Rust的大模型海量文件版本存储内核系列:Valhalla SafeNet Accelerator 开源一页纸尽调系列 取证快照Commit:55823e479998c6140a86005bcaf66ced226456e2|证据模式&…

2026/10/14 21:19:59 阅读更多 →
小白程序员必看:从零理解大模型Agent架构,收藏学习进阶

小白程序员必看:从零理解大模型Agent架构,收藏学习进阶

本文从范式、框架、架构三个层面,深入浅出地解析了Agent的能力范式、主流框架的架构抽象以及如何设计自己的Agent系统。文章首先介绍了Agent的五种能力范式,并阐述了它们之间的关系;接着,详细分析了LangGraph、AutoGen、CrewAI、M…

2026/10/14 21:19:59 阅读更多 →

最新新闻

304与316不锈钢紧固件怎么选?成分差异、耐腐蚀对比与采购验收全解

304与316不锈钢紧固件怎么选?成分差异、耐腐蚀对比与采购验收全解

看到这个标题,我猜很多人第一反应是"不就是螺丝嘛,304还是316,哪个贵买哪个"。但实际接触过工业采购、设备维护或者出海项目的人,都知道这个选择经常让人头疼——选贵了,成本上去了;选错了&#…

2026/10/14 23:48:05 阅读更多 →
揭秘AI生成视频的真相:代码驱动Canvas逐帧渲染

揭秘AI生成视频的真相:代码驱动Canvas逐帧渲染

朋友给我发来一段很特别的视频,说这是某个叫 Opus 5.5 的AI工具“生成”的。我盯了几秒钟,第一反应是不对劲——画面太干净了。没有常见视频生成模型那种隐隐约约的噪点,边缘稳定,线条利落,几何结构严丝合缝&#xff0…

2026/10/14 23:48:05 阅读更多 →
本2硕9小厂975写SQL怕被AI替,拿到老家国企早9晚5Offer,该求稳吗?

本2硕9小厂975写SQL怕被AI替,拿到老家国企早9晚5Offer,该求稳吗?

本2硕9小厂975写SQL怕被AI替,拿到老家国企早9晚5Offer,该求稳吗? 本2硕9高学历与在小厂975写SQL的低技术现状形成反差,该开发者在脉脉表达了被AI替代的焦虑,手握十八线老家早9晚5国企Offer陷入去留困境。原帖用户讨论称…

2026/10/14 23:48:05 阅读更多 →
Mask R-CNN在显微矿物图像实例分割中的落地实践

Mask R-CNN在显微矿物图像实例分割中的落地实践

简介:本资源是一套基于TensorFlow 2.x与Keras实现的Mask R-CNN显微矿物图像实例分割完整项目,面向深度学习初学者、地质图像分析研究者及计算机视觉实践者,解决矿物显微图像中目标检测与像素级分割的实际问题,适用于地质勘探、矿产…

2026/10/14 23:48:05 阅读更多 →
ISACA数字化转型风险指南:治理与管理域框架及落地实操

ISACA数字化转型风险指南:治理与管理域框架及落地实操

简介:《风险视角下中国企业数字化转型应对指南》是ISACA中国2020年发布的知识性研究成果,面向企业管理者、风控与安全从业者及数字化转型相关人员,旨在提供识别、评估和应对数字IT风险的可行方法。指南分为“框架和指导原则”与“与ISACA资源…

2026/10/14 23:48:05 阅读更多 →
行政区划代码SQL脚本:GB/T 2260维度表设计与查询实践

行政区划代码SQL脚本:GB/T 2260维度表设计与查询实践

简介:依据GB/T 2260标准整理的全国行政区划代码资源,内含截至2017年的四级行政区划数据共46462条,覆盖省/直辖市、市、县与乡/镇/街道/兵团,适合开发者、数据分析师及GIS项目人员用于建表存储、地址匹配与区域维度分析。压缩包共4…

2026/10/14 23:47:02 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →