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

解决leetcode第3537题填充特殊网格

3537.填充特殊网格

难度:中等

问题描述:

给你一个非负整数N,表示一个2^{N}x2^{N}的网格。你需要用从0到2^{2N}-1的整数填充网格,使其成为一个特殊网格。一个网格当且仅当满足以下所有条件时,才能称之为特殊网格:

右上角象限中的所有数字都小于右下角象限中的所有数字。

右下角象限中的所有数字都小于左下角象限中的所有数字。

左下角象限中的所有数字都小于左上角象限中的所有数字。

每个象限也都是一个特殊网格。

返回一个2^{N}x2^{N}的特殊网格。

注意:任何1x1的网格都是特殊网格。

示例1:

输入:N=0

输出:[[0]]

解释:

唯一可以放置的数字是0,并且网格中只有一个位置。

示例2:

输入:N=1

输出:[[3,0],[2,1]]

解释:

每个象限的数字如下:

右上角:0

右下角:1

左下角:2

左上角:3

由于0<1<2<3,该网格满足给定的约束条件。

示例3:

输入: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)

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

提示:

0<=N<=10

问题分析:

这个问题还是很有趣的,有点找规律的意思,特别是把它变成网格之后,这个规律就很容易观察到了,而且我们解决问题也要利用这个规律。

N=0时,输出[[0]]

N=1时,输出[[3,0],[2,1]]

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

 

可以看出,四个象限,按右上->右下->左下->左上的顺序,对应位置的值增加了4

N=3时,输出[[63, 60, 51, 48, 15, 12, 3, 0], [62, 61, 50, 49, 14, 13, 2, 1], [59, 56, 55, 52, 11, 8, 7, 4], [58, 57, 54, 53, 10, 9, 6, 5], [47, 44, 35, 32, 31, 28, 19, 16], [46, 45, 34, 33, 30, 29, 18, 17], [43, 40, 39, 36, 27, 24, 23, 20], [42, 41, 38, 37, 26, 25, 22, 21]]

四个象限,按右上->右下->左下->左上的顺序,对应位置的值增加了16

......

这是一种自相似数据,有点分形的意思。

正是因为是一种自相似的数据,所以采用递归方法来实现这个问题的求解。

与n-1对应的特殊网格,其实只是与n对应网格的右上象限部分,根据对应位置增加的值,就可以把右下、左下、左上的网格求出,然后再组合出与n对应的网格。

程序如下:

#函数根据参数n的值,返回满足条件的特殊网格
def get_n_array(n):if n==0:return [[0]]elif n==1:return [[3,0],[2,1]]else:right_up=get_n_array(n-1)k=2**(2*n-2)right_down=[]for i in right_up:a=[b+k for b in i]right_down.append(a)left_down=[]for i in right_up:a=[b+2*k for b in i]left_down.append(a)left_up=[]for i in right_up:a=[b+3*k for b in i]left_up.append(a)my_array=[]for i in range(2**(n-1)):my_array.append(left_up[i]+right_up[i])for i in range(2**(n-1)):my_array.append((left_down[i]+right_down[i]))return my_array
n=int(input('pls input n='))
a=get_n_array(n)

 

运行实例一

pls input n=0

[[0]]

运行实例二

pls input n=1

[[3, 0], [2, 1]]

运行实例三

pls input n=2

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

运行实例四

pls input n=3

[[63, 60, 51, 48, 15, 12, 3, 0], [62, 61, 50, 49, 14, 13, 2, 1], [59, 56, 55, 52, 11, 8, 7, 4], [58, 57, 54, 53, 10, 9, 6, 5], [47, 44, 35, 32, 31, 28, 19, 16], [46, 45, 34, 33, 30, 29, 18, 17], [43, 40, 39, 36, 27, 24, 23, 20], [42, 41, 38, 37, 26, 25, 22, 21]]

运行实例五

pls input n=4

[[255, 252, 243, 240, 207, 204, 195, 192, 63, 60, 51, 48, 15, 12, 3, 0], [254, 253, 242, 241, 206, 205, 194, 193, 62, 61, 50, 49, 14, 13, 2, 1], [251, 248, 247, 244, 203, 200, 199, 196, 59, 56, 55, 52, 11, 8, 7, 4], [250, 249, 246, 245, 202, 201, 198, 197, 58, 57, 54, 53, 10, 9, 6, 5], [239, 236, 227, 224, 223, 220, 211, 208, 47, 44, 35, 32, 31, 28, 19, 16], [238, 237, 226, 225, 222, 221, 210, 209, 46, 45, 34, 33, 30, 29, 18, 17], [235, 232, 231, 228, 219, 216, 215, 212, 43, 40, 39, 36, 27, 24, 23, 20], [234, 233, 230, 229, 218, 217, 214, 213, 42, 41, 38, 37, 26, 25, 22, 21], [191, 188, 179, 176, 143, 140, 131, 128, 127, 124, 115, 112, 79, 76, 67, 64], [190, 189, 178, 177, 142, 141, 130, 129, 126, 125, 114, 113, 78, 77, 66, 65], [187, 184, 183, 180, 139, 136, 135, 132, 123, 120, 119, 116, 75, 72, 71, 68], [186, 185, 182, 181, 138, 137, 134, 133, 122, 121, 118, 117, 74, 73, 70, 69], [175, 172, 163, 160, 159, 156, 147, 144, 111, 108, 99, 96, 95, 92, 83, 80], [174, 173, 162, 161, 158, 157, 146, 145, 110, 109, 98, 97, 94, 93, 82, 81], [171, 168, 167, 164, 155, 152, 151, 148, 107, 104, 103, 100, 91, 88, 87, 84], [170, 169, 166, 165, 154, 153, 150, 149, 106, 105, 102, 101, 90, 89, 86, 85]]

找到规律,就已经成功了一半,再注意细节,精心设计程序,运行并反复调试,问题就会很快解决。

 

http://www.xdnf.cn/news/321283.html

相关文章:

  • CSS详细学习笔记
  • eclipse常用快捷键
  • Jmeter进行http接口测试
  • 使用VSCode在Windows 11上编译运行项目
  • 005 权限的理解
  • Linux上将conda环境VLLM服务注册为开机自启
  • Java 常用的 ORM框架(对象关系映射)
  • 企业级AI革命!私有化部署开源大模型:数据安全+自主可控,打造专属智能引擎
  • Ubuntu20.04安装使用ROS-PlotJuggler
  • 【MCP】客户端配置(ollama安装、qwen2.5:0.5b模型安装、cherry-studio安装配置)
  • C#与Halcon联合编程
  • 迁移学习:如何加速模型训练和提高性能
  • 锁相环HMC830的调试
  • 缓存替换算法与存储器管理的分页、分段、段页式管理联系
  • http Status 400 - Bbad request 网站网页经常报 HTTP 400 错误,清缓存后就好了的原因
  • 办公学习 效率提升 超级PDF处理软件 转换批量 本地处理
  • android 折叠屏开发适配全解析:多窗口、铰链处理与响应式布局
  • 回溯进阶(一):以全排列问题为例,来展示如何对回溯的纵向和横向进行操作
  • C++ 有哪些标准版本
  • eFish-SBC-RK3576工控板音频接口测试操作指南
  • ElementUI 表格el-table自适应高度设置
  • RISC-V架构深度解析
  • SPSS系统发育分析中的聚类相关part
  • Python案例实战《手势识别》
  • Linux:web服务nginx
  • 应急响应靶机-Linux(1):知攻善防实验室
  • 如何设置 FE 的内存大小?
  • Selenium Web自动化测试学习笔记(一)
  • IoTDB端边云同步技术的五大常见场景及简便使用方式
  • Vue:现代前端开发的基石引擎