leetcode-184周赛-5383-给N*3的网格图涂色的方案数

 题目描述:

 

 方法一:

class Solution:
    def numOfWays(self, n: int) -> int:
        mod = int(1e9+7)
        s = ['ryr','ryg','rgr','rgy','yrg','ygr','ygy','yry','gry','grg','gyr','gyg']
        ans = {a:1 for a in s}
        for i in range(n-1):
            newans = {a:0 for a in s}
            for i in s:
                for j in s:
                    if all(a != b for a,b in zip(i,j)):
                        newans[i] += ans[j]
                        newans[i] %= mod
            ans = newans
        return sum(ans.values())%mod

方法二:

class Solution:
    def numOfWays(self, n: int) -> int:        
        same, diff = 6, 6    # 代表初始时第一行两类各6种
        for k in range(1,n):            
            same, diff = same * 3 + diff * 2, same * 2 + diff * 2
        return (same + diff) % (10 ** 9 + 7)

 

posted @ 2020-04-12 20:09  oldby  阅读(289)  评论(0编辑  收藏  举报