首页 > 其他分享 >leetcode 2266. 统计打字方案数

leetcode 2266. 统计打字方案数

时间:2024-12-29 13:57:16浏览次数:6  
标签:int res 打字 num pressedKeys 2266 leetcode dp MOD

2266. 统计打字方案数

题目挺简单的,就是溢出、取余特别令人抓狂

class Solution {
public:
    const int MOD = 1'000'000'007;
    int count(const int &choices,const int &num){
        if(num <= 2)  return num;
        if(num == 3)  return 4;
        vector<long> dp(num+1);//dp[i]表示 i 个字符的组合个数
        dp[0] = 1;dp[1] = 1;dp[2] = 2;dp[3] = 4;
        for(int i = 4;i <= num;++i){
            dp[i] += (dp[i-1] + dp[i-2] + dp[i-3]);
            if(choices == 4)  dp[i] += dp[i-4];
            if(dp[i] >= MOD)  dp[i] %= MOD;
        }
        return dp[num];
    }
    int countTexts(string pressedKeys) {
        int n = pressedKeys.size();
        long res = 1;
        for(int i = 0,j = 0;i < n && j < n;){
            while(j < n && pressedKeys[i] == pressedKeys[j])  ++j;
            if(pressedKeys[i] == '7' || pressedKeys[i] == '9'){
                res = res * count(4,j-i) % MOD;//如果写成res *= count(4,j-i)就会溢出
            }
            else  res = res * count(3,j-i) % MOD;
            i = j;
        }
        if(res >= MOD)  return res & MOD;
        return res;
    }
};

 

标签:int,res,打字,num,pressedKeys,2266,leetcode,dp,MOD
From: https://www.cnblogs.com/uacs2024/p/18638705

相关文章

  • LeetCode 82:删除排序链表中的重复元素 II
    题目:方法一:方法二:代码示例packagecom.zy.leetcode.LeetCode_82;/***@Author:zy*@Date:2024-12-26-10:51*@Description:*.删除排序链表中的重复元素II*/publicclassListNode_82{privateintval;privateListNode_82next;......
  • 2024/12/17 【字符串】LeetCode 459.重复的子字符串 【❌】
    https://programmercarl.com/0459.%E9%87%8D%E5%A4%8D%E7%9A%84%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2.html#%E6%80%9D%E8%B7%AFhttps://leetcode.cn/problems/repeated-substring-pattern/子串结束位置大于中间位置的话,一定不能重复组成字符串。如果next[len-1]!=-1,则说......
  • leetcode 2466. 统计构造好字符串的方案数
    2466.统计构造好字符串的方案数没写出来......
  • 【线性DP】LeetCode 2320. 统计放置房子的方式数
    题目https://leetcode.cn/problems/count-number-of-ways-to-place-houses/题解由于道路两边的房子彼此互不影响,因此满足相互独立的条件,故而两侧的方案的乘积就是最后的答案。因为两侧空地的数量都是\(n\),因此只要算出其中一侧的方案即可,另一侧的方案相同。每块空地上都可以......
  • leetcode 475. 供暖器
    475.供暖器没做出来......
  • LeetCode 23 : 合并K个升序链表
    题目:解题思路:1.将多个链表合并为两个链表2.使用21题用的,将两个有序链表合并代码示例:packagecom.zy.leetcode.LeetCode_23;/***@Author:zy*@Date:2024-12-26-21:37*@Description:合并K个升序链表*多路递归*/publicclassListNode_23{priv......
  • LeetCode-字符串转换整数(008)
    一.题目描述请你来实现一个 myAtoi(strings) 函数,使其能将字符串转换成一个32位有符号整数。函数 myAtoi(strings) 的算法如下:空格:读入字符串并丢弃无用的前导空格("")符号:检查下一个字符(假设还未到字符末尾)为 '-' 还是 '+'。如果两者都不存在,则假定结果为正。......
  • LeetCode-整数反转(007)
    一.题目描述给你一个32位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围 [−231, 231 −1] ,就返回0。假设环境不允许存储64位整数(有符号或无符号)。二.示例 示例1:输入:x=123输出:321示例2:输入:x=-......
  • LeetCode题练习与总结:键盘行--500
    一、题目描述给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。请注意,字符串 不区分大小写,相同字母的大小写形式都被视为在同一行。美式键盘 中:第一行由字符 "qwertyuiop" 组成。第二行由字符 "asdfghjkl" 组成......
  • leetcode 541.反转字符串||
    看了一圈题解,好像没有c的解法,这里简单分享一下个人的做法:题目为:给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则......