Python约瑟夫环问题

在2019腾讯提前批实习的笔试题中就出现了约瑟夫环的问题,

当时我用collections.deque来做的,每次动态的删除节点,并重新改变指向来实现的,

并没有细想过有没有更快的方法。

(由于这种方法过于简单,就不罗列出来了,需要的朋友自行了解deque的leftappend子方法即可)

参考知乎的这篇博客,我受到了很大的启发

因此记录其中的递归方法在这里,方便自己复习。

index before 1 2 3 4 5 6
第1轮 1 2 x 4 5 6
第2轮 4 5 x 1 2 3
第3轮 1 2 x 3 4 x
第4轮 2 3 x x 1 x
第5轮 2 x x x 1(3) x
最后结果 1 x x x x x

下一轮删除节点后的编号是 old = (new + m - 1) % n + 1

def joseph(int n, int m)
    if(n == 1):
    	return n;
    return (self.joseph(n - 1, m) + m - 1) % n + 1
posted @ 2019-09-03 15:28  Kouin  阅读(2223)  评论(0编辑  收藏  举报