面试题62.圆圈最后剩下的数一共有n个元素,围成一个圆圈,从第0开始,每数m删一。找出最后剩下的那个。先把n个元素看成一个从0到n-1的序列,如果只有一个元素,剩下的一定是0号。每m删除n个元素的问题可以定义为f(n,m),求解f(n,m)的解可以通过f(n-1,m)的解得到。这里m是固定的,可以省略,即f(n)。f(1)=0看如何从f(n-1)得到f(n):f(n)删除第m个,留下n-1,也就是0到m-1和m+1到n-1,对于f(n-1),起点是m+1。如果已获得f(n-1),则设置为x,但f(n-1)的编号来源与f(n)不同。f(n-1)的个数需要转换为f(n),即f(n)=(m+f(n-1))%n。递归因为python对最大递归层数有限制,需要通过sys.setrecursionlimit(100000)来增加限制。sys.setrecursionlimit(100000)classSolution:deflastRemaining(self,n:int,m:int)->int:deff(n):如果n==1:返回0如果n==2:返回m%2return(f(n-1)+m)%nreturnf(n)递归类解决方案:deflastRemaining(self,n:int,m:int)->int:x=0foriinrange(1,n+1):x=(x+m)%ireturnx这里有一个问题,其中n最大为100位,但m为2:https://vijos.org/p/1095欢迎来到我的博客:https://codeplot.top/我的博客主题分类:https://codeplot.top/categories/%E5%88%B7%E9%A2%98/
