题目
描述
编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。
下一个人继续从 1 开始报数。
n-1 轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?
数据范围: 1≤n,m≤10000
进阶:空间复杂度 O(1),时间复杂度 O(n)
思路
前进m-1步,删除所在的值继续走
代码
python版本:
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param n int整型
# @param m int整型
# @return int整型
#
class Solution:
def ysf(self , n: int, m: int) -> int:
# write code here
sign = [x for x in range(1, n+1)]
cur_pos = 0
for i in range(n-1):
cur_pos = (cur_pos+m-1)%len(sign)
del sign[cur_pos]
res = sign[0]
return res
c++版本:
无