python-leetcode-2103. 环和杆

2103. 环和杆 - 力扣(LeetCode)

要解决这个问题,可以按照以下步骤来进行:

  1. 理解问题:

    • 共有 n 个环,每个环的颜色是红 (R)、绿 (G)、蓝 (B) 三种之一。

    • 每个环都位于编号为 0 到 9 的某根杆上。

    • 我们需要统计哪些杆上拥有三种颜色的环。

  2. 思路:

    • 通过遍历字符串 rings,我们可以逐个读取每个环的信息,包括颜色和杆的编号。

    • 使用一个字典(或列表)来记录每根杆上分别有什么颜色的环。

    • 最后,我们遍历这个记录,统计哪些杆上拥有红、绿、蓝三种颜色的环。

  3. 实现步骤:

    • 我们需要一个字典 rods,它的键是杆的编号(0 到 9),值是一个集合,用于记录该杆上出现的颜色。

    • 遍历 rings 字符串,获取每个环的颜色和对应的杆编号,并将颜色添加到相应杆的集合中。

    • 最后,检查每个杆的集合是否包含了三种颜色。

  4. 代码实现:

def countRodsWithAllColors(rings):
    # 创建一个字典,键是杆的编号,值是一个集合,记录该杆上的所有颜色
    rods = {i: set() for i in range(10)}
    
    # 遍历rings,每两个字符代表一个环的颜色和位置
    for i in range(0, len(rings), 2):
        color = rings[i]    # 环的颜色
        position = int(rings[i + 1])  # 环的位置(杆编号)
        
        # 将该颜色加入到对应杆的位置
        rods[position].add(color)
    
    # 统计包含三种颜色的杆
    count = 0
    for colors in rods.values():
        if len(colors) == 3:  # 如果该杆上有红、绿、蓝三种颜色的环
            count += 1
    
    return count
  1. 说明:

    • 我们通过 rods = {i: set() for i in range(10)} 初始化了一个字典,确保每根杆上都有一个空集合,用来存储每根杆上出现的颜色。

    • 使用 for i in range(0, len(rings), 2) 遍历每对环的颜色和位置。

    • rods[position].add(color) 会将颜色添加到相应杆的位置,利用集合特性,自动避免重复颜色。

    • 最后,我们遍历每根杆的颜色集合,统计那些包含三种颜色的杆。

  2. 示例测试:

# 示例 1
rings = "R3G2B1"
print(countRodsWithAllColors(rings))  # 输出: 0 (没有杆上集齐三种颜色)

# 示例 2
rings = "R0G0B0R1G1B1"
print(countRodsWithAllColors(rings))  # 输出: 2 (杆 0 和 杆 1 集齐了三种颜色)

这样我们就可以准确地统计哪些杆集齐了所有三种颜色的环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值