您的位置:首页 > 娱乐 > 明星 > 代码优化_潍坊seo外包平台_外贸seo公司_海南seo

代码优化_潍坊seo外包平台_外贸seo公司_海南seo

2024/12/23 14:58:30 来源:https://blog.csdn.net/qq_67733273/article/details/143993076  浏览:    关键词:代码优化_潍坊seo外包平台_外贸seo公司_海南seo
代码优化_潍坊seo外包平台_外贸seo公司_海南seo

文章目录

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

题目描述

在这里插入图片描述

题解思路

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

我们的关键问题就转换成了按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/

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com