首页 > 其他分享 >Leetcode-552 学生出勤记录II

Leetcode-552 学生出勤记录II

时间:2024-08-19 12:53:42浏览次数:5  
标签:int res 552 II Leetcode MOD

Leetcode-552 学生出勤记录II

1. 题目描述

Leetcode-552 学生出勤记录II

2. 解题思路

(1) 使用记忆化搜索来实现;
(2) 定义f[i][j][k]为右边填写j个A, 且右边相邻位置有k个连续的L的情况下,向左填字母能构造多少个长为i的字符串;
(3) 对于每次填字符有三种可能分别列出其递推表达式,求出最终的结果。

3. 代码实现

const int MOD = 1'000'000'007;

class Solution {
public:
    int checkRecord(int n) {
        // 定义f[i][j][k]为右边填写j个A, 且右边相邻位置有k个连续的L的情况下
        // 向左填字母能构造多少个长为i的字符串
        // 初始化操作
        int f[n + 1][2][3];
        for (int i = 0; i <= 1; i++) {
            for (int j = 0; j <= 2; j++) {
                f[0][i][j] = 1;
            }
        }
        for (int i = 1; i <= n; i++) {
            for (int j = 0; j < 2; j++) {
                for (int k = 0; k < 3; k++) {
                    int res = f[i - 1][j][0]; // 填p
                    if (j == 0) {
                        res = (res + f[i - 1][1][0]) % MOD; // 填A
                    }
                    if (k < 2) {
                        res = (res + f[i - 1][j][k + 1]) % MOD; // 填L
                    }
                    f[i][j][k] = res;
                }
            }
        }
        return f[n][0][0];
    }
};

标签:int,res,552,II,Leetcode,MOD
From: https://blog.csdn.net/qewa132/article/details/141322623

相关文章

  • ASCII和Unicode区别
    ASCII和Unicode的主要区别在于它们的编码范围、长度、兼容性、支持的语言种类以及编码方式。‌编码范围和长度‌:ASCII编码只能表示128个字符,包括英文字母、数字和一些标点符号,每个字符占用一个字节。而Unicode编码可以表示几乎所有语言的字符,包括拉丁文、中文、日文等,每个......
  • 【142. 环形链表 II 中等】
    题目:给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如......
  • Leetcode每日刷题之18.四数之和
    1.题目解析这里的18.四数之和与之前的三数之和有着异曲同工之妙,所以建议看完三数之和再来看本题,详细题目见Leetcode每日刷题之15.三数之和 ,只不过这里需要寻找的是四元组,也是不能寻找重复的四元组并且四元组内的数字可以按照任意顺序返回2.算法原理关于四数之和的思路......
  • LeetCode 556. 下一个更大元素 III(next_permutation())
    题目:556.下一个更大元素III思路:用到next_permutation(),细节看注释。next_permutation、prev_permutationclassSolution{public:intnextGreaterElement(intn){ //转变为string类型,便于调用next_permutation()strings=to_string(n);......
  • 【代码随想录训练营第42期 Day32打卡 - 从零开始动态规划 - LeetCode 509. 斐波那契数
    目录一、做题心得二、动规五步走三、题目与题解题目一:509.斐波那契数题目链接题解1:记忆性递归 题解2:动态规划题目二:70.爬楼梯 题目链接题解:动态规划题目三:746.使用最小花费爬楼梯题目链接题解:动态规划三、小结一、做题心得今天开始动态规划章节的第一......
  • (nice!!!)LeetCode 552. 学生出勤记录 II(动态规划dp递归版、记忆化dfs)
    题目:552.学生出勤记录II思路:记忆化搜索dfs,细节看注释classSolution{public:constintmod=1e9+7;//状态f[u][a][b]表示:在选择第u个位置前,缺勤次数为a次,且当前连续迟到次数为b次时,可以得到的合法出勤次数intf[100010][5][5];intdfs(intu,int......
  • leetcode 49.字母异位词分组
    leetcode49.字母异位词分组题干给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词是由重新排列源单词的所有字母得到的一个新单词。示例1:输入:strs=["eat","tea","tan","ate","nat","bat"]输出:[["bat"],["nat",&......
  • iis7/8隐藏banner信息
    原文链接:https://www.cnblogs.com/kowloon/p/9071872.html一、隐藏server版本1、为什么要隐藏?答:服务器端返回信息中包含有软件版本等详细信息,攻击者利用这些信息可以实现更有目的性的攻击。因此隐藏server版本信息,在一定程度上能够提高服务器的安全性。2、未隐藏前查看到的信......
  • Leetcode每日一题 20240817 3137.K周期字符串需要的最少操作次数
    题目描述给你一个长度为n的字符串word和一个整数k,其中k是n的因数。在一次操作中,你可以选择任意两个下标i和j,其中0<=i,j<n,且这两个下标都可以被k整除,然后用从j开始的长度为k的子串替换从i开始的长度为k的子串。也就是说,将子串word[i…i+k......
  • Leetcode每日一题 20240818 551.学生出勤记录Ⅰ
    题目描述给你一个字符串s表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符:‘A’:Absent,缺勤‘L’:Late,迟到‘P’:Present,到场如果学生能够同时满足下面两个条件,则可以获得出勤奖励:按总出勤计,学生缺勤(‘A’)严......