552 学生出勤记录 II(递推-动态规划-枚举技巧,netty框架工作原理

    # 初始状态表示当前有0个字母, 0个A, 0个连续的字母L的方案数目为1

    dp[0][0][0] = 1

    mod = 10 ** 9 + 7

    for i in range(n):

        # 第二层表示字母A的数目

        for j in range(2):

            # 第三层表示连续字母L的数目

            for k in range(3):

                # 枚举的是下一个位置, 因为求解的是方案数目, 所以需要累加上当前状态的dp值

                # 判断下一个位置填字母A的情况

                if j == 0: dp[i + 1][j + 1][0] = (dp[i + 1][j + 1][0] + dp[i][j][k]) % mod

                # 判断下一个位置为L的字母的情况

                if k + 1 <= 2: dp[i + 1][j][k + 1] = (dp[i + 1][j][k + 1] + dp[i][j][k]) % mod

                # 下一个位置为字母P一定合法所以直接计算即可

                dp[i + 1][j][0] = (dp[i + 1][j][0] + dp[i][j][k]) % mod

    res = 0

    # 计算有n个字母所有的合法方案, 包含合法的字母A和字母L的情况

    for j in range(2):

        for k in range(3):

            res = (res + dp[n][j][k]) % mod

    return res



**java代码(232ms)**



public class Solution {

public int checkRecord(int n) {

    int dp[][][] = new int[n + 1][2][3];

    dp[0][0][0] = 1;

    int mod = 1000000007;

    for (int i = 0; i < n; ++i){

        for (int j = 0; j < 2; ++j){

            for (int k = 0; k < 3; ++k){

                if (j == 0){

                    dp[i + 1][j + 1][0] = (dp[i + 1][j + 1][0] + dp[i][j][k]) % mod;

                }

                if (k + 1 <= 2){

                    dp[i + 1][j][k + 1] = (dp[i + 1][j][k + 1] + dp[i][j][k]) % mod;

                }

                dp[i + 1][j][0] = (dp[i + 1][j][0] + dp[i][j][k]) % mod;

            }

        }

    }

    int res = 0;

    for (int j = 0; j < 2; ++j){

        for (int k = 0; k < 3; ++k){

            res = (res + dp[n][j][k]) % mod;

        }

    }

    return res;

}

}




  




# 总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](

)**

**麻烦帮忙转发一下这篇文章+关注我**

![就这一次!拼多多内部架构师培训Kafka源码笔记(现已绝版)](https://www.icode9.com/i/ll/?i=img_convert/988f458b2ba06064badc785d1db7148c.png)

> **本文已被[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://codechina.csdn.net/m0_60958482/java-p7)收录**
31330508235)]

> **本文已被[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://codechina.csdn.net/m0_60958482/java-p7)收录**
上一篇:nyoj 14 会场安排问题(贪心专题)java


下一篇:解决redis超时io.lettuce.core.RedisCommandTimeoutException: Connection timed out after 5s