【题目描述】
你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿 三种颜色之一给每一个格子上色,且确保相邻格子颜色不同(也就是有相同水平边或者垂直边的格子颜色不同)。
给你网格图的行数 n 。
请你返回给 grid 涂色的方案数。由于答案可能会非常大,请你返回答案对 10^9 + 7 取余的结果。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-ways-to-paint-n-3-grid
【解题思路】
类似于这样子的题,需要画一遍,这道题填充一行有两种方式:用三种颜色填充f0(6种方法)和用两种颜色(6种方法)填充f1。对于下一层来说,也是这两种填充方式:对于f0这种方式来说,它的填充方式跟上一个f0相关的会有2种方法,跟上一个f1相关的会有2种方法;对于f1这种方式来说,它的填充方式跟上一个f0相关的会有2种方法,跟上一个f1相关的会有3种方法。用Python实现的代码如下:
class Solution(object):
def numOfWays(self, n):
"""
:type n: int
:rtype: int
"""
NUM = 1e9 + 7
f0, f1= 6, 6
for i in range(2, n+1):
f0, f1 = (2*f0+2*f1) % NUM, (2*f0+3*f1)%NUM
return int((f0 + f1) % NUM)