约瑟夫环

剑指offer62 约瑟夫环

f(n,m) = (f(n-1,m)+m)%n

func lastRemaining(n int, m int) int {
    //反复计算下标在上层的下标位置
    //例如 0,1,2,3 n=4,m=2,第一次去除1后剩余2,3,0  2的位置下标0在上层的下标为(0+m)%4=2

    x:=0  //1个数则下标为0
    for i:=2;i<=n;i++{
        x = (x+m)%i  //一个数时下标0在2个数时候对应的下标为 (0+m)%2
    }
    return x
}
posted @ 2022-03-16 22:18  海拉尔  阅读(37)  评论(0编辑  收藏  举报