记一次笔试遇到leetcode原题却没a出来的经历

给 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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值