1823. 找出游戏的获胜者

113 阅读1分钟
class Solution {
public:
    int find(int n,int k){
        // 设函数find(n,k)可以从n个人中,从第0个开始找,找到存活的人
        // 0...n-1
        if(n<=1) return 0;
        int ans=find(n-1,k); //现在ans存放的是,从n-1人中,步长为k的找出幸存者
        //现在要算,幸存者在当前数组中的位置
        // 从0开始,下一个找到并淘汰的人是: (k-1)%n,随后从 (k-1)%n+1 开始找下下个被淘汰的
        ans=(ans+(k-1)%n+1)%n;
        return ans;
    }
    int findTheWinner(int n, int k) {
        return find(n,k)+1;
    }
};
class Solution {
    public int find(int n,int k){
        if(n==1) return 0;
        return (find(n-1,k)+(k-1)%n+1)%n;
    }
    public int findTheWinner(int n, int k) {
        return find(n,k)+1;
    }
}