题目
There are n
friends that are playing a game. The friends are sitting in a circle and are numbered from 1
to n
in clockwise order. More formally, moving clockwise from the ith
friend brings you to the (i+1)th
friend for 1 <= i < n
, and moving clockwise from the nth
friend brings you to the 1st
friend.
The rules of the game are as follows:
- Start at the
1st
friend. - Count the next
k
friends in the clockwise direction including the friend you started at. The counting wraps around the circle and may count some friends more than once. - The last friend you counted leaves the circle and loses the game.
- If there is still more than one friend in the circle, go back to step
2
starting from the friend immediately clockwise of the friend who just lost and repeat. - Else, the last friend in the circle wins the game.
Given the number of friends, n
, and an integer k
, return the winner of the game.
题解
// 思路来源: chinmay-d
class Solution {
public int findTheWinner(int n, int k) {
return soln(n,k)+1; // added 1 in 'a' as the index of a vector starts from 0;
}
public int soln(int n, int k){
if(n==1) return 0; // return 0 when n=1;
int x = soln(n-1, k); // final element x always is 0 as returned when n=1;
int y = (x+k) % n; // the actual mapping of the final
// element to our original number of person ;
return y;
}
}
思路
约瑟夫问题:根据题目描述推导出递归公式,f(n) = (f(n-1) + k) %n