数字字符串中圆圈的数量计算
问题描述
小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)。如果是,根据相应数字的规则计算圆圈数量并累加到总圆圈数中。
具体步骤阐述
-
首先,初始化一个变量来存储圆圈的总数,比如命名为
total_circles
,并将其初始值设为 0。 -
然后,开始遍历数字字符串。对于字符串中的每个字符,可以通过索引或者迭代的方式进行访问。
- 如果当前字符是 '0',则将
total_circles
的值增加 1。因为数字 0 含有一个圆圈。 - 如果当前字符是 '6',同样将
total_circles
增加 1。数字 6 也含有一个圆圈。 - 当遇到字符 '9' 时,执行与 '0' 和 '6' 相同的操作,即增加
total_circles
的值 1。数字 9 同样有一个圆圈。 - 而当字符为 '8' 时,情况稍有不同。由于数字 8 含有两个圆圈,所以需要将
total_circles
的值增加 2。 - 如果当前字符不是上述含有圆圈的数字中的任何一个,即属于其他数字字符,那么不进行任何操作,继续检查下一个字符。
- 如果当前字符是 '0',则将
-
遍历完整个数字字符串后,
total_circles
变量中存储的值就是该数字字符串中所有数字包含的圆圈总数。
示例演示
假设给定数字字符串为 "1234567890"。
-
开始遍历这个字符串。
- 第一个字符是 '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)
小结
这题比较简单 主要是用两种方法锻炼一下自己