网易首页 > 网易号 > 正文 申请入驻

2025-10-22:填充特殊网格。用go语言,给定非负整数 N,要求构造一个边长为 2^N 的方阵,用 0 到 2^{2N}-

0
分享至

2025-10-22:填充特殊网格。用go语言,给定非负整数 N,要求构造一个边长为 的方阵,用 0 到 这 个整数恰好一次地填满整个矩阵。把矩阵沿中线分成四个等大的子方阵(左上、右上、左下、右下),需要满足:

  • • 右上子方阵内的任意元素都小于右下子方阵内的任意元素;

  • • 右下子方阵内的任意元素都小于左下子方阵内的任意元素;

  • • 左下子方阵内的任意元素都小于左上子方阵内的任意元素;

  • • 并且这四个子方阵本身也要满足同样的性质(对更小尺寸继续递归)。

当 N=0(即 1×1 方格)时,条件自洽。输出满足上述所有条件的 方阵。
0 <= N <= 10。

输入: N = 2。

输出: [[15,12,3,0],[14,13,2,1],[11,8,7,4],[10,9,6,5]]。

解释:


在这里插入图片描述

每个象限的数字如下:

右上角:3, 0, 2, 1

右下角:7, 4, 6, 5

左下角:11, 8, 10, 9

左上角:15, 12, 14, 13

max(3, 0, 2, 1) < min(7, 4, 6, 5)

max(7, 4, 6, 5) < min(11, 8, 10, 9)

max(11, 8, 10, 9) < min(15, 12, 14, 13)

这满足前三个要求。此外,每个象限也是一个特殊网格。因此,这是一个特殊网格。

题目来自力扣3537。

分步骤描述填充特殊网格的过程

填充特殊网格的过程基于分治策略递归实现,核心思想是将大网格不断划分为更小的子网格,并按照特定顺序填充数字,以确保满足题目中的大小关系条件。以下是详细步骤:

  1. 1.初始化阶段

  • • 创建一个大小为 (2^N \times 2^N) 的二维矩阵(方阵),所有元素初始值可设为0或占位符。

  • • 初始化一个全局计数器val(起始值为0),用于生成待填充的数字(从0到 (2^{2N}-1))。

2.递归填充函数的设计

  • • 定义递归函数dfs,参数包括当前处理的子网格(通过行、列边界隐式定义)和当前层级的列偏移量l(用于定位子网格的起始列)。

  • 终止条件:当当前子网格大小为 (1 \times 1)(即仅一个单元格)时,将计数器val的值填入该单元格,并执行val++

  • 递归划分:若子网格大小大于 (1 \times 1),则计算当前网格边长的一半 (m = \text{len}(a) / 2),将网格划分为四个等大的象限。

3.递归填充顺序(关键步骤):

  • • 按特定顺序递归处理四个象限,确保填充后满足“右上 < 右下 < 左下 < 左上”的约束:

    • 第一步:填充右上象限
      对右上子网格(行范围:当前网格的前m行,列范围:从l + m开始的右半部分)递归调用dfs

    • 第二步:填充右下象限
      对右下子网格(行范围:后m行,列范围:从l + m开始的右半部分)递归调用dfs

    • 第三步:填充左下象限
      对左下子网格(行范围:后m行,列范围:从l开始的左半部分)递归调用dfs

    • 第四步:填充左上象限
      对左上子网格(行范围:前m行,列范围:从l开始的左半部分)递归调用dfs

  • 为什么此顺序有效:全局计数器val从0开始递增。先填充的象限获得较小的数字,后填充的获得较大的数字。因此,右上象限数字最小,右下次之,左下较大,左上最大,自然满足大小关系。每个象限内部继续递归应用相同规则,保证递归性质。

4.填充示例(以 (N=2) 为例):

  • • 初始网格为 (4 \times 4),第一次划分后 (m=2)。

  • • 填充顺序:

  1. 1. 右上象限(行0-1, 列2-3)填充数字0-3。

  2. 2. 右下象限(行2-3, 列2-3)填充数字4-7。

  3. 3. 左下象限(行2-3, 列0-1)填充数字8-11。

  4. 4. 左上象限(行0-1, 列0-1)填充数字12-15。

• 最终矩阵如题目示例所示,每个象限内数字也递归满足相同条件。

5.终止与回溯

  • • 递归最终到达 (1 \times 1) 网格时直接赋值,无需进一步划分。

  • • 所有递归调用完成后,矩阵填充结束。

时间复杂度和空间复杂度分析
  • 时间复杂度:(O(4^N))
    算法需填充整个 (2^N \times 2^N) 网格的每个单元格,总单元格数为 (2^{2N} = 4^N)。每个单元格仅被访问一次并赋值,因此时间复杂度为 (O(4^N))。

  • 额外空间复杂度:(O(N))

    • • 主要来自递归调用栈的深度。每次递归将网格尺寸减半,递归深度为 (N)(因为 (2^N) 需经过 (N) 次划分才能到达 (1 \times 1))。每层递归使用常数空间存储参数(如边界信息),因此栈空间复杂度为 (O(N))。

    • • 全局计数器val占用 (O(1)) 空间。

    • • 注意:输出矩阵本身占 (O(4^N)) 空间,但此为问题要求,不计入“额外”空间。

Go完整代码如下:

package main import (     "fmt" ) func specialGrid(n int) [][]int {     val := 0     var dfs func([][]int, int)     dfs = func(a [][]int, l int) {         if len(a) == 1 {             a[0][l] = val             val++             return         }         m := len(a) / 2         dfs(a[:m], l+m)         dfs(a[m:], l+m)         dfs(a[m:], l)         dfs(a[:m], l)     }     a := make([][]int, 1<      for  i :=  range  a {         a[i] =  make ([] int ,  1 <     }     dfs(a,  0 )      return  a } func main()  {     N :=  2     result := specialGrid(N)     fmt.Println(result) }

Python完整代码如下:

# -*-coding:utf-8-*- def special_grid(n):     val = [0]  # 使用列表来模拟引用传递,以便在递归中修改          def dfs(a, l):         if len(a) == 1:             a[0][l] = val[0]             val[0] += 1             return                  m = len(a) // 2         dfs(a[:m], l + m)  # 右上         dfs(a[m:], l + m)  # 右下           dfs(a[m:], l)      # 左下         dfs(a[:m], l)      # 左上          size = 1 << n     a = [[0] * size for _ in range(size)]     dfs(a, 0)     return a def main():     N = 2     result = special_grid(N)     for row in result:         print(row) if __name__ == "__main__":     main()

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
哈登太累!小卡错失绝杀,快船大爆冷,这一战我彻底看清5个现实

哈登太累!小卡错失绝杀,快船大爆冷,这一战我彻底看清5个现实

毒舌NBA
2025-11-04 14:20:46
宇宙到底有多大?不敢想象,看了之后会让你疯狂!

宇宙到底有多大?不敢想象,看了之后会让你疯狂!

宇宙时空
2025-11-02 09:37:51
毛主席对尼泊尔首相说:你想把珠峰全部划归贵国?还有更好的办法

毛主席对尼泊尔首相说:你想把珠峰全部划归贵国?还有更好的办法

鹤羽说个事
2025-10-30 15:53:46
吴石出事,家中佣人却没受到牵连,原因是她拒绝了吴石的这个提议

吴石出事,家中佣人却没受到牵连,原因是她拒绝了吴石的这个提议

阿校谈史
2025-11-04 02:10:36
开拓者115-123湖人!湖人4连胜又爆一新星,杨瀚森遭弃用成吉祥物

开拓者115-123湖人!湖人4连胜又爆一新星,杨瀚森遭弃用成吉祥物

詹妹侃体育
2025-11-04 16:32:45
某律所合伙人被爆出轨,原配怒拍视频揭露小三空姐,男方是凤凰男

某律所合伙人被爆出轨,原配怒拍视频揭露小三空姐,男方是凤凰男

社会酱
2025-11-03 20:54:12
风水轮流转!大衣哥终于等来好消息,前儿媳陈亚楠悔得肠子都青了

风水轮流转!大衣哥终于等来好消息,前儿媳陈亚楠悔得肠子都青了

郭蛹包工头
2025-11-04 04:13:48
“解绑”杨振宁后,翁帆回归大女主,被可怜的她才是真正人生赢家

“解绑”杨振宁后,翁帆回归大女主,被可怜的她才是真正人生赢家

胡一舸南游y
2025-10-23 19:10:30
王家卫录音门背后:张曼玉张国荣都和他绝交了,只有王菲不怕他

王家卫录音门背后:张曼玉张国荣都和他绝交了,只有王菲不怕他

影视口碑榜
2025-11-03 17:24:52
德媒:安世半导体才值几分钱?欧洲没抢对地方,真正值钱的是中国

德媒:安世半导体才值几分钱?欧洲没抢对地方,真正值钱的是中国

爱史纪
2025-11-04 10:44:58
我们为什么不愿意在举办奥运会了?事情坏就坏在国际奥委会自身。

我们为什么不愿意在举办奥运会了?事情坏就坏在国际奥委会自身。

百态人间
2025-10-18 11:53:06
董璇现身机场情绪低落!脸上褶多又僵又肿,挺肚走路被调侃有孕味

董璇现身机场情绪低落!脸上褶多又僵又肿,挺肚走路被调侃有孕味

心静物娱
2025-11-04 10:09:05
震惊全韩!中国学生为工科拼命,韩国学生为医学疯魔,KBS纪录片揭露真实现状

震惊全韩!中国学生为工科拼命,韩国学生为医学疯魔,KBS纪录片揭露真实现状

最英国
2025-11-03 19:26:41
东契奇下达最后通牒!逼宫湖人交易詹皇换锋线,巴特勒成冲冠关键

东契奇下达最后通牒!逼宫湖人交易詹皇换锋线,巴特勒成冲冠关键

番茄体坛
2025-11-03 13:13:07
已经不是无知那么简单,而是彻头彻尾的作恶!

已经不是无知那么简单,而是彻头彻尾的作恶!

胖胖说他不胖
2025-11-03 16:32:51
刘强东朋友圈疑曝光,回应卑微同框照,自嘲在老婆面前失去没自信

刘强东朋友圈疑曝光,回应卑微同框照,自嘲在老婆面前失去没自信

萌神木木
2025-11-01 18:58:23
重庆一中学生出租屋内死亡,联合调查通报:心源性猝死,排除刑事案件

重庆一中学生出租屋内死亡,联合调查通报:心源性猝死,排除刑事案件

黄河新闻网吕梁频道
2025-11-04 10:04:57
从G联赛回归遭遇DNP,这会是杨瀚森未来的常态吗?

从G联赛回归遭遇DNP,这会是杨瀚森未来的常态吗?

齐鲁壹点
2025-11-04 16:54:57
逃不掉了,38万亿债务炸雷,美联储连夜急刹车,中国成最大赢家?

逃不掉了,38万亿债务炸雷,美联储连夜急刹车,中国成最大赢家?

梁讯
2025-11-03 16:22:34
有李霄鹏必保级?海牛明年难了!邓卓翔人在江湖 教授:骂声一片

有李霄鹏必保级?海牛明年难了!邓卓翔人在江湖 教授:骂声一片

刀锋体育
2025-11-04 12:55:25
2025-11-04 17:07:00
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1022文章数 49关注度
往期回顾 全部

科技要闻

硅谷甄嬛传:奥特曼优雅挑衅马斯克狠狠回击

头条要闻

女子称因劝邻居不要把垃圾扔其家门口遭围殴 当地回应

头条要闻

女子称因劝邻居不要把垃圾扔其家门口遭围殴 当地回应

体育要闻

27岁热刺门将,夺冠后退役当导演

娱乐要闻

《繁花》录音事件完整版长达43分钟

财经要闻

作价40亿美元!星巴克中国易主

汽车要闻

上汽旗舰智己LS9首发评测 可能是最好开的9系SUV

态度原创

本地
房产
时尚
公开课
军事航空

本地新闻

秋颜悦色 | 在榆中,秋天是一场盛大的视觉交响

房产要闻

信达·繁花里 | 老照片征集活动 温情启幕

冬天穿灰色,这8种搭配方式很高级!

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

俄最新核潜艇下水 可搭载“末日鱼雷”

无障碍浏览 进入关怀版