一、题目理解
在这道题目中,小 F 和他的朋友们围成一个圈,每个人背上贴着字母 A 或者 B。从第一个人开始计数,每遇到一个贴着字母 A 的人就计数一次,当计数到第 k 个 A 时,任务结束。我们需要帮助小 F 计算总共需要数多少个人才能在第 k 次遇到 A 后停止,并且保证至少有一个人背上是 A。
关键要点
- 循环计数:因为朋友们是围成一个圈,所以计数过程是循环的。当数到最后一个人后,会重新从第一个人开始数。
- 条件判断:判断当前数到的人背上的字母是否为 A,若是则计数变量(遇到 A 的数量)加 1。
- 结束条件:当遇到 A 的数量达到 k 时,停止计数,并返回总共数过的人数。
二、解题思路
-
初始化变量
- 我们需要两个变量,一个是
count_a用来记录已经数到的 A 的数量,初始化为 0。另一个是count_people用来记录总共数过的人数,初始化为 0。
- 我们需要两个变量,一个是
-
循环计数过程
- 我们使用一个
while循环,循环条件是count_a < k,也就是还没有数到第 k 个 A。 - 在循环内部,我们需要判断当前数到的人背上的字母是否为 A。由于是循环计数,我们通过
count_people % len(people)来获取当前要判断的人的位置。这里len(people)是字符串people(代表朋友们背上的字母序列)的长度,count_people % len(people)可以保证我们在循环遍历字符串时不会越界。 - 如果
people[count_people % len(people)] == 'A',也就是当前数到的人背上是 A,那么count_a就加 1。 - 不管当前数到的人背上是 A 还是 B,
count_people都要加 1,因为我们数过了一个人。
- 我们使用一个
-
返回结果
- 当
count_a达到 k 时,循环结束,此时count_people的值就是我们总共数过的人数,将其返回。
- 当
三、代码分析
def solution(n: int, k: int, people: str) -> int:
count_a = 0
count_people = 0
while count_a < k:
if people[count_people % len(people)] == 'A':
count_a += 1
count_people += 1
return count_people
-
函数定义
solution函数接受三个参数,n(朋友的数量,虽然在代码中未使用,但在题目描述中有提及),k(要数到的 A 的数量)和people(代表朋友们背上的字母序列的字符串),并返回一个整数(总共数过的人数)。
-
变量初始化
count_a = 0和count_people = 0分别初始化了记录 A 的数量和数过的人数的变量。
-
循环体
- 在
while循环中,首先通过if people[count_people % len(people)] == 'A':判断当前位置的字母是否为 A。如果是,count_a加 1。然后count_people加 1,进行下一次计数。
- 在
-
返回值
- 当
count_a达到 k 时,循环结束,函数返回count_people。
- 当