青训营X豆包MarsCode 技术训练营第十一课 | 豆包MarsCode AI 刷题

62 阅读2分钟

第478题 非重叠子数组的最大和

1.题目分析

题目要求我们计算字符串 SSS 的所有可能表示方式,字符串只包含数字 12,这些数字可以通过不同大小写组合生成单词。数字可以直接表示为 "1""2",也可以分别映射为英文单词 "one""two",单词中的每个字母有小写、大写和标题形式,导致大量的组合。

关键点分析

  1. 每个数字有两种主要表示:

    • 数字本身(如 "1""2")。
    • 单词形式(如 "one""two")。
  2. 单词形式的每个字母有 232^3 = 8种大小写组合。

  3. 总组合数由所有字符独立组合计算。

公式推导

每个字符的组合数为: 1 + 232^3 = 9

字符串长度为N,总组合数为:9N9^N

2.解题思路

  • 检查输入是否符合要求:

    • 字符串 S 长度为 N。
    • S 仅包含 12
  • 计算组合数:

    • 每个字符有 9 种组合。
    • N 个字符的组合总数为 9N9^N

3.解题代码

def solution(N: int, S: str) -> int:
    if not S or len(S) != N or any(c not in "12" for c in S):
        raise ValueError("Invalid input: S should be a string of length N containing only '1' and '2'")
    # 每个字符可以有 27 种不同的组合
    return 9 ** N

if __name__ == '__main__':
    print(solution(N = 1, S = "2") == 9)
    print(solution(N = 2, S = "12") == 81)
    print(solution(N = 3, S = "121") == 729)

4.模块解释

  • 输入验证

    • 检查字符串 S 长度是否等于 N。
    • 检查 S 是否只包含 12
    • 如果输入无效,抛出异常。
  • 组合计算

    • 每个字符有 9 种组合,字符串长度 N 的组合数为 9N9^N

5.结论

通过分析题目可得:

  1. 每个数字可以有 9 种不同组合(包含数字本身和单词形式的大小写组合)。
  2. 对于字符串 S,长度为 N,总组合数为 9N9^N

示例验证

  1. 样例 1

    • 输入:N=1,S="2"
    • 结果:9
  2. 样例 2

    • 输入:N=2,S="12"
    • 结果:81
  3. 样例 3

    • 输入:N=3,S="121"
    • 结果:729

代码逻辑简单且效率高,时间复杂度为 O(1)。