题解 | #孩子们的游戏(圆圈中最后剩下的数)#

孩子们的游戏(圆圈中最后剩下的数)

https://www.nowcoder.com/practice/f78a359491e64a50bce2d89cff857eb6

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param n int整型 
# @param m int整型 
# @return int整型
#
class Solution:
    def LastRemaining_Solution(self , n: int, m: int) -> int:
        result = 0
        # 
        for i in range(2, n + 1):
            # 重新编号 
            # 为甚么叫重新编号呢
            # 假设 n = 9 m = 3 =>f(9,3) array =  1 2 3 4 5 6 7 8 9
            # 去掉 3 array = 4 5 6 7 8 9 1 2 ==编号==> 1 2 3 4 5 6 7 8
            # 编号的关系其实就是 1+3,2+3,...(7+3)%9,(8+3)%9
            # 再去去掉3 array = 4 5 6 7 8 1 2 ==编号==> 1 2 3 4 5 6 7
            # 编号的关系是 1+3,2+3 ... (6+3)%8 (7+3)%8
            # 此时 n = 8 m = 3 => f(8,3) 其实f(8,3)就是f(9,3)去掉一个数后剩下来的
            # 所以 f(8,3)游戏的结果就是f(9,3)唯一不同的其实是编号的不同,原来的编号加上m
            # 故需要重新编号 f(9,3) = (f(8,3) + 3) % 9
            # 一般的 f(n,m) = (f(n-1,m) + m)% n  
            # n指的是当前共有多少个人 每循环一轮少一个 本质上是每一次圈的人数不一致
            # f(1,m) = 1 所以从2开始
            result = (result + m) % i
        return result

全部评论

相关推荐

03-11 20:17
浙江大学 Java
蝴蝶飞出了潜水钟丿:浙江大学加粗加艺术字加特效加特技加加加....然后随便投就行了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务