题目:
- 0,1,2,…,n-1这n个数字排成一个圈
- 从数字0开始,每次从这个圆圈中删除第m个数字。
- 求出这个圆圈中最后一个剩下的数字
分析:
可以用一个通式表示:
代码:
# -*- coding:utf-8 -*-
class Solution:
def LastRemaining_Solution(self, n, m):
# write code here
# 通过推导公式可得:
# n = 1 时 f(1) = 0
# f(n) = (f(n-1) + m) % n
if n < 1: # 没有孩子时,返回-1
return -1
if n == 1: # 只有一个孩子时,直接返回孩子的编号,即0
return 0
value = 0
# O(n)的时间复杂度
for index in range(2,n+1):
currentValue = (value + m) % index
value = currentValue
return value