当前位置: 首页 > article >正文

Rust 力扣 - 2266. 统计打字方案数

文章目录

  • 题目描述
  • 题解思路
  • 题解代码
  • 题目链接

题目描述

在这里插入图片描述

题解思路

这题可以先求按了多少次相同连续的按钮,所有的连续相同按钮表示的方案数的乘积就是本题答案

我们的关键问题就转换成了按n个连续相同按钮表示的方案数

设f(i)表示按i个连续相同按钮表示的方案数

  • 如果按钮是三个字符的
    f(i) = f(i - 1) + f(i - 2) + f(i - 3)
  • 如果按钮是四个字符的
    f(i) = f(i - 1) + f(i - 2) + f(i - 3) + f(i - 4)

题解代码

impl Solution {
    pub fn count_texts(pressed_keys: String) -> i32 {
        let pressed_keys = pressed_keys.as_bytes();
        let n = pressed_keys.len();
        let mut f3 = vec![0; (n + 1).max(5)];
        let mut f4 = vec![0; (n + 1).max(5)];
        (f3[1], f3[2], f3[3], f3[4], f4[1], f4[2], f4[3], f4[4]) = (1, 2, 4, 7, 1, 2, 4, 8);
        for i in 5..=n {
            f3[i] = (f3[i - 1] + f3[i - 2] + f3[i - 3]) % 1000000007;
            f4[i] = (f4[i - 1] + f4[i - 2] + f4[i - 3] + f4[i - 4]) % 1000000007;
        }

        let mut c = 1;
        let mut ans = 1usize;

        for i in 1..n {
            if pressed_keys[i] == pressed_keys[i - 1] {
                c += 1;
            } else {
                match pressed_keys[i - 1] {
                    b'7' | b'9' => {
                        ans *= f4[c];
                    }
                    _ => {
                        ans *= f3[c];
                    }
                }
                c = 1;
                ans %= 1000000007;
            }
        }
        match pressed_keys[n - 1] {
            b'7' | b'9' => {
                ans *= f4[c];
            }
            _ => {
                ans *= f3[c];
            }
        }
        (ans % 1000000007) as i32
    }
}

题目链接

https://leetcode.cn/problems/count-number-of-texts/


http://www.kler.cn/a/407896.html

相关文章:

  • 开发中使用UML的流程_03 CIM-2:分析业务流程
  • 渗透测试笔记——shodan(4)
  • 深入解析UML组件图:概念、构成与实际应用
  • 5G CPE与4G CPE的主要区别有哪些
  • 畅听FM 3.0.0 | 很有果味的电台软件,超多FM电台,支持播放本地音乐
  • 浅谈 proxy
  • C++中的初始化列表
  • 如何设计和实现通用唯一 Code 生成方法
  • 从数据提取到管理:TextIn平台的全面解析与产品体验
  • Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的?
  • 网络安全 - DOS
  • 解决k8s拉取私有镜像401 Unauthorized 问题
  • 二分排序
  • vue基于高德地图实现城市管网压力点、管线、测距、测面积、绘制多边形、绘制圆代码
  • React 组件生命周期
  • uniapp调整webview的大小与位置,解决遮挡问题
  • ElementUI之el-date-picker禁选配置
  • ESP8266 AP模式TCP服务器 电脑手机网络调试助手
  • 设计模式-创建型-原型模式
  • aws 小白入门,VPC 子网、路由表、互联网网关