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

leetcode 每日一题 1931. 用三种不同颜色为网格涂色

题目

1931. 用三种不同颜色为网格涂色

思路

先获取列表,上下左右的所有情况。解决一维的问题
然后所有一维的问题暴力循环。已知一个一维的解,可以对应其他一维解的列表(用于记忆化搜索)
然后使用递归,进行累加

代码
from collections import defaultdict# 用java的思维写的
class Solution(object):def colorTheGrid(self, m, n):mod = 10 ** 9 + 7# 初始化字典valid = dict()# 枚举一行中所有可能的值 3的m次方for mask in range(3 ** m):# 初始化一个list  list存放的是具体的color,用于前后值的比较# mask和list是相互对应的color = list()tmp = maskfor i in range(m):color.append(tmp % 3)tmp = tmp // 3  # 需要的是返回整数# 对color的各项进行校验flag = Falsefor i in range(m - 1):if color[i] == color[i + 1]:flag = Truebreakif not flag:valid[mask] = color# 需要预处理,上下两行的对应关系,key和list的结构# 遍历所有valid中的数值adjacent = dict()for key1, value1 in valid.items():adjacent_list = list()for key2, value2 in valid.items():# 需要遍历上下是否会冲突flag = Falsefor x, y in zip(value1, value2):if x == y:flag = Trueif not flag:adjacent_list.append(key2)adjacent[key1] = adjacent_listf = dict()g = dict()for key1, _ in valid.items():f[key1] = 1for i in range(1, n):g = dict()  # 这里需要清空数据for mask1 in valid.keys():for mask2 in adjacent[mask1]:# g[mask1] 如果取不到会报错if mask1 in g:g[mask1] += f[mask2]else:g[mask1] = f[mask2]if g[mask1] >= mod:g[mask1] -= modf = gsum = 0for v1, v2 in f.items():sum += v2return sum % mod# 用python的语法糖写
def colorTheGrid2(self, m, n):mod = 10 ** 9 + 7# 初始化字典valid = dict()# 枚举一行中所有可能的值 3的m次方for mask in range(3 ** m):# 初始化一个list  list存放的是具体的color,用于前后值的比较# mask和list是相互对应的color = list()tmp = maskfor i in range(m):color.append(tmp % 3)tmp = tmp // 3  # 需要的是返回整数if any(color[i] == color[i + 1] for i in range(m - 1)):continuevalid[mask] = color# 需要预处理,上下两行的对应关系,key和list的结构# 遍历所有valid中的数值adjacent = defaultdict(list)for key1, value1 in valid.items():for key2, value2 in valid.items():if not any(x == y for x, y in zip(value1, value2)):adjacent[key1].append(key2)f = defaultdict(int)for key1, _ in valid.items():f[key1] += 1for i in range(1, n):g = defaultdict(int)for mask1 in valid.keys():for mask2 in adjacent[mask1]:g[mask1] += f[mask2]g[mask1] = g[mask1] % modf = greturn sum(f.values()) % modsolution = Solution()
ans = solution.colorTheGrid(1, 1)
print(ans)
ans = solution.colorTheGrid(1, 2)
print(ans)
ans = solution.colorTheGrid(5, 5)
print(ans)ans = colorTheGrid2(None, 5, 5)
print(ans)dic = defaultdict(list)
dic["a"].append("11")
print(dic)  # defaultdict(<class 'list'>, {'a': ['11']})dict2 = dict()
value = list()
value.append("11")
dict2["a"] = value
print(dict2)  # {'a': ['11']}my_list = [5, 8, 12, 3, 7]
my_list2 = [my_list[i] * 2 for i in range(len(my_list))]
print(my_list2)"""
None相当于null
if not flag: 相当于!flag
adjacent[key1] = adjacent_list  相当于adjacent.put(key1,adjacent_list)  hashmap用法if mask1 in g:g[mask1] += f[mask2]    这里取值之前还需要进行key不在map(dict)的判断my_list = [5, 8, 12, 3, 7]
长度 len(my_list)  如果是java my_list.length()或者是my_list.size()python有if any的写法
my_list = [5, 8, 12, 3, 7]
result = False
for num in my_list:if num > 10:result = Truebreakresult = any(num > 10 for num in my_list)python 还有all的语法糖
my_list = [6, 8, 7, 9]
result = True
for num in my_list:if num <= 5:result = Falsebreak
result = all(num > 5 for num in my_list)这里直接初始化值dic = defaultdict(list)
dic["a"].append("11")
print(dic)  # defaultdict(<class 'list'>, {'a': ['11']})dict2 = dict()
value = list()
value.append("11")
dict2["a"] = value
print(dict2)  # {'a': ['11']}my_list = [5, 8, 12, 3, 7]
my_list2 = [my_list[i] * 2 for i in range(len(my_list))]
print(my_list2)
这个就像是java的流式处理,只是处理的逻辑前置了f = dict()
可以有四种方法
f.keys()
f.values()
f.items()
"""
总结

这里对于数据的处理上比较考验细节

相关文章:

  • gtest 库的安装和使用
  • python打卡第30天
  • dbhub MCP服务搭建
  • cursor+MCP系列:12306-MCP车票查询工具
  • Logrotate:配置日志轮转、高效管理Linux日志文件
  • 秒删node_modules 极速删除 (rimraf工具)
  • 非金属材料的分类及应用
  • C++寻位映射的奇幻密码:哈希
  • NIFI 2.40简介及部署
  • unordered_map/set常用接口及模拟实现
  • 网络请求和状态管理
  • ebpf-verifier
  • Flink 非确定有限自动机NFA
  • JavaScript:PC端特效--缓动动画
  • SHELL练习题(1-11题)记录(牛客)
  • Python训练营打卡——DAY30(2025.5.19)
  • python fastapi + react, 写一个图片 app
  • 英特尔硬件笔试面试题型解析
  • YOLO模型使用jupyterlab的方式进行预测/推理(示例)
  • nginx 流量控制
  • 66岁华仁世纪集团有限公司创始人、董事长梁福东逝世
  • 视频丨习近平在河南洛阳市考察调研
  • 上海浦江游览南拓新航线首航,途经前滩、世博文化公园等景点
  • 优质文化资源下基层,上海各区优秀群文团队“文化走亲”
  • 下辖各区密集“联手”,南京在下一盘什么样的棋?
  • 体坛联播|热刺追平单赛季输球纪录,世俱杯或创收20亿美元