给 N x 3 网格图涂色的方案数
你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿。
三种颜色之一给每一个格子上色,且确保相邻格子颜色不同(也就是有相同水平边或者垂直边的格子颜色不同)。给你网格图的行数 n 。
请你返回给 grid 涂色的方案数。由于答案可能会非常大,请你返回答案对 10^9 + 7 取余的结果。
输入:n = 1
输出:12
解释:总共有 12 种可行的方法:
题目可以进行变形:
比如,输出 N*3 的1,2,3三个数相邻不能重复的全排列
n = 1,结果可以是(1,2,3)(1,2,1)(3,2,3)(2,1,2)… 12种
n = 2,结果可以是(1,2,1,2,1,2)… 54种
leetcode 1411
f[i][0]=2*f[i−1][0]+2*f[i−1][1]
f[i][1]=2*f[i−1][0]+3*f[i−1][1]
具体的题解去下面这个地址看一下
https://leetcode-cn.com/problems/number-of-ways-to-paint-n-3-grid/
class Solution {
static final int MOD = 1000000007;
public int numOfWays(int n) {
long fi0 = 6, fi1 = 6;
for (int i = 2; i <= n; ++i) {
long newFi0 = (2 * fi0 + 2 * fi1) % MOD;
long newFi1 = (2 * fi0 + 3 * fi1) % MOD;
fi0 = newFi0;
fi1 = newFi1;
}
return (int) ((fi0 + fi1) % MOD);
}
}