zoukankan      html  css  js  c++  java
  • 剑指 Offer 62. 圆圈中最后剩下的数字

    0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。

    例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。

    示例 1:

    输入: n = 5, m = 3
    输出: 3
    示例 2:

    输入: n = 10, m = 17
    输出: 2
     

    限制:

    1 <= n <= 10^5
    1 <= m <= 10^6

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof


    Josephus problem

    class Solution:
        def lastRemaining(self, n: int, m: int) -> int:
            def josephus(n, k): 
                if (n == 1): 
                    return 1
                else:  
                    return (josephus(n - 1, k) + k-1) % n + 1
            return josephus(n,m)-1
    class Solution:
        def lastRemaining(self, n: int, m: int) -> int:
            if n==1:return 0
            res=0
            for i in range(1,n):
                res=(res+m)%(i+1)
            return res
    class Solution:
        def lastRemaining(self, n: int, m: int) -> int:
            res=0
            for i in range(2,n+1):
                res=(res+m)%i
            return res
  • 相关阅读:
    HTML超链接应用场景
    String 字符串和StringBuffer的知识点总结
    猜数游戏代码
    MemoryLayout
    偏swift框架
    git的使用
    寄存器
    swift基础
    枚举
    安装Ubuntu 20.04 以后
  • 原文地址:https://www.cnblogs.com/xxxsans/p/13778854.html
Copyright © 2011-2022 走看看