以前看了很久都没会,今天看了突然会了,其实很简单,举个例子就行
我们定义f(m,n) = m个人,每n个人杀一个的最终获胜者
那么f(10,3)就是1,2,3,4,5,6,7,8,9,10中每3个人杀一个的获胜者
那么进行完一轮后,就是4,5,6,7,8,9,10,1,2
我们对比一下原始的f(9,3)——1,2,3,4,5,6,7,8,9
其实很容易观察到这两个数列之间的关系
f(10,3) = (f(9,3) + 3 - 1)% 10 + 1
其实也就是f(m,n) = (f(m-1,n) + n - 1) % m + 1
这个-1+1只是因为题目要求从1开始,如果题目要求要求从零开始,把它们去掉就行
class Solution {
public int findTheWinner(int n, int k) {
if(n == 1) {
return 1;
}
return (findTheWinner(n - 1, k) + k - 1) % n + 1;
}
}