数字字符串中圆圈的数量计算 | 豆包MarsCode AI刷题

6 阅读4分钟

数字字符串中圆圈的数量计算

问题描述

小I拿到了一串数字字符,她想知道这串数字中一共有多少个圆圈。具体规则如下:

  • 数字0、6、9各含有一个圆圈。
  • 数字8含有两个圆圈。
  • 其他数字不含有任何圆圈。

测试样例

样例1:

输入:s = "1234567890" 输出:5

样例2:

输入:s = "8690" 输出:5

样例3:

输入:s = "1111" 输出:0

题目解析

这道题目其实就是对数字字符串进行遍历,然后根据规则要求,只要 0 6 8 9 四个数字出现时就进行对应的累计合计,然后输出这个累加值即可。这题相当简单,也有几种不同的写法,我也都会列出来。

唯一特殊的就是 8 数字字符,当出现它的时候累加要加2。

当然不能忘记的就是要进行忽略,即当遍历除 0 6 8 9 四个数字字符 以外的数字都不进行累加。

一种方法是辅助数据结构法:直接用python的字典 , 给每个需要累加的数字后附上对应的累加值,而忽略的数字可以直接赋0值。在遍历数字字符串时,通过查询这个映射来快速确定当前字符对应的圆圈数量,并进行累加。

circle_count = {
        '0': 1,
        '6': 1,
        '9': 1,
        '8': 2,
        '1': 0,
        '2': 0,
        '3': 0,
        '4': 0,
        '5': 0,
        '7': 0
    }

另一种就是 逐个字符检查法:可以遍历给定的数字字符串中的每一个字符。对于每个字符,判断它是否为含有圆圈的数字(0、6、9、8)。如果是,根据相应数字的规则计算圆圈数量并累加到总圆圈数中。

具体步骤阐述

  1. 首先,初始化一个变量来存储圆圈的总数,比如命名为total_circles,并将其初始值设为 0。

  2. 然后,开始遍历数字字符串。对于字符串中的每个字符,可以通过索引或者迭代的方式进行访问。

    • 如果当前字符是 '0',则将total_circles的值增加 1。因为数字 0 含有一个圆圈。
    • 如果当前字符是 '6',同样将total_circles增加 1。数字 6 也含有一个圆圈。
    • 当遇到字符 '9' 时,执行与 '0' 和 '6' 相同的操作,即增加total_circles的值 1。数字 9 同样有一个圆圈。
    • 而当字符为 '8' 时,情况稍有不同。由于数字 8 含有两个圆圈,所以需要将total_circles的值增加 2。
    • 如果当前字符不是上述含有圆圈的数字中的任何一个,即属于其他数字字符,那么不进行任何操作,继续检查下一个字符。
  3. 遍历完整个数字字符串后,total_circles变量中存储的值就是该数字字符串中所有数字包含的圆圈总数。

示例演示

假设给定数字字符串为 "1234567890"。

  1. 开始遍历这个字符串。

    • 第一个字符是 '1',不是含有圆圈的数字,不进行任何操作。
    • 第二个字符是 '2',同样不做处理。
    • 依次类推,直到遇到字符 '6'。此时,将total_circles的值增加 1,现在total_circles = 1
    • 继续遍历,后面的字符也都不含有圆圈,直到遇到字符 '8'。由于数字 8 含有两个圆圈,所以将total_circles的值增加 2,现在total_circles = 3
    • 接着遇到字符 '9',增加total_circles的值 1,现在total_circles = 4
    • 最后遇到字符 '0',再增加total_circles的值 1,最终total_circles = 5

个人解答

# 辅助结构数据法
def solution(s: str) -> int:
    # 创建一个字典,存储每个数字对应的圆圈数量
    circle_count = {
        '0': 1,
        '6': 1,
        '9': 1,
        '8': 2,
        '1': 0,
        '2': 0,
        '3': 0,
        '4': 0,
        '5': 0,
        '7': 0
    }
    
    # 初始化圆圈总数
    total_circles = 0
    
    # 遍历字符串中的每个字符
    for char in s:
        # 累加当前字符对应的圆圈数量
        total_circles += circle_count[char]
    
    # 返回圆圈总数
    return total_circles
​
if __name__ == '__main__':
    print(solution(s = "1234567890") == 5)
    print(solution(s = "8690") == 5)
    print(solution(s = "1111") == 0)
# 逐个字符检查法
def solution(s: str) -> int:
    # 初始化圆圈总数
    total_circles = 0
    
    # 遍历字符串中的每个字符
    for char in s:
        # 使用 if 语句判断当前字符对应的圆圈数量
        if char == '0' or char == '6' or char == '9':
            total_circles += 1
        elif char == '8':
            total_circles += 2
        # 其他数字不含有圆圈,不需要处理
    
    # 返回圆圈总数
    return total_circles
​
if __name__ == '__main__':
    print(solution(s = "1234567890") == 5)
    print(solution(s = "8690") == 5)
    print(solution(s = "1111") == 0)

小结

这题比较简单 主要是用两种方法锻炼一下自己