552. Student Attendance Record II

Problem refer: https://leetcode.com/problems/student-attendance-record-ii/description

// My solution:
// A good mathmatical derivation problem.
// But it makes me confused with the word: "more than two continuous ‘L‘ (late)".
// And finally find it actually represents "LLL".
// The last solution refers to the discuss:
// https://discuss.leetcode.com/topic/86696/share-my-o-n-c-dp-solution-with-thinking-process-and-explanation

class Solution {
public:
    static const int N = 100000 + 1;
    static const int MOD = 1000000000 + 7;
    int P[N],L[N],A[N];
    int ans[N];

    int calc(int n) {
        if (ans[n]) return ans[n];
        calc(n-1);

        P[n] = (P[n-1] + A[n-1])%MOD + L[n-1];
        P[n] %= MOD;

        L[n] = ((P[n-1] + A[n-1])%MOD + A[n-2])%MOD + P[n-2];
        L[n] %= MOD;
        A[n] = (A[n-1] + A[n-2])%MOD + A[n-3];
        A[n] %= MOD;
        ans[n] = (P[n] + L[n])%MOD + A[n];
        ans[n]%=MOD;
        return ans[n];
    }
    int checkRecord(int n) {
        memset(ans, 0, sizeof ans);
        P[1]=L[1]=A[1]=1;
        ans[1] = 3;

        P[2] = L[2] = 3;
        A[2] = 2;
        ans[2] = 8;

        P[3] = 8;
        L[3] = 7;
        A[3] = 4;
        ans[3] = 19;
        return calc(n);
    }
};
时间: 2024-07-30 17:30:39

552. Student Attendance Record II的相关文章

Leetcode-552 Student Attendance Record II(学生出勤记录 II)

1 #define maxn 1000000 2 #define _for(i,a,b) for(int i = (a);i < (b);i ++) 3 #define pb push_back 4 #define MOD 1000000007 5 6 class Solution 7 { 8 public: 9 int checkRecord(int n) 10 { 11 long long int dp[2][2][3] {0}; 12 13 dp[0][0][0] = dp[0][0][1

551. Student Attendance Record I【easy】

551. Student Attendance Record I[easy] You are given a string representing an attendance record for a student. The record only contains the following three characters: 'A' : Absent. 'L' : Late. 'P' : Present. A student could be rewarded if his attend

【leetcode_easy】551. Student Attendance Record I

problem 551. Student Attendance Record I 参考 1. Leetcode_easy_551. Student Attendance Record I; 完 原文地址:https://www.cnblogs.com/happyamyhope/p/10947954.html

551. 学生出席记录 Student Attendance Record I

You are given a string representing an attendance record for a student. The record only contains the following three characters: 'A' : Absent. 'L' : Late. 'P' : Present. A student could be rewarded if his attendance record doesn't contain more than o

[LeetCode] Student Attendance Record I

You are given a string representing an attendance record for a student. The record only contains the following three characters: 'A' : Absent. 'L' : Late. 'P' : Present. A student could be rewarded if his attendance record doesn't contain more than o

551. Student Attendance Record I(LeetCode)

You are given a string representing an attendance record for a student. The record only contains the following three characters: 'A' : Absent. 'L' : Late. 'P' : Present. A student could be rewarded if his attendance record doesn't contain more than o

551 Student Attendance Record I

You are given a string representing an attendance record for a student. The record only contains the following three characters: 'A' : Absent. 'L' : Late. 'P' : Present. A student could be rewarded if his attendance record doesn't contain more than o

LeetCode 551. Student Attendance Record I (C++)

题目: You are given a string representing an attendance record for a student. The record only contains the following three characters: 'A' : Absent. 'L' : Late. 'P' : Present. A student could be rewarded if his attendance record doesn't contain more th

Student Attendance Record I

这道题为简单题 题目: 思路: 1.这道题主要搞清楚两种情况就行了: (1).如果'A'出现两次 (2).如果出现'LLL' 以上两种情况出现任意一种就返回False 代码: 我的代码: 1 class Solution(object): 2 def checkRecord(self, s): 3 """ 4 :type s: str 5 :rtype: bool 6 """ 7 a = 0 8 b = 0 9 for i in s: 10 if