假设我们有n个孩子围成一圈站着,他们在等着气球。分配从第k个孩子开始(首先在索引0处进行),然后给他们一个气球,他们离开了圈子。现在,每个第k个孩子都会获得一个气球,顺时针方向旋转,直到只剩下一个孩子获得气球为止。因此,如果我们有n和k,我们必须找到接收最后一个气球的孩子的起始索引。
因此,如果输入类似于n = 3 k = 2,则输出将为1,在第一个回合中,孩子2得到一个气球,然后离开,因此圆圈将为[0,1]。在第二轮中,孩子0得到一个气球,圆圈将为[1]。
为了解决这个问题,我们将按照以下步骤操作:
arr:=范围从0到n的新列表
初始化:= 0
当arr的大小> 1时,执行
删除:=(init + k)mod的arr大小
删除arr [删除]
初始化:=删除
返回arr [0]
让我们看下面的实现以更好地理解:
class Solution: def solve(self, n, k): arr = list(range(0, n)) init = 0 while len(arr) > 1: remove = (init + k) % len(arr) del arr[remove] init = remove return arr[0] ob = Solution()n = 3 k = 2 print(ob.solve(n, k))
3,2
输出结果
1