import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @param m int整型
* @return int整型
*/
// 根据公式 x = (m + x) % i; 状态转移公式 f(n, m) = (f(n-1, m) + m) % n
// n个数之后去掉第m个数,剩下n - 1个数,依然要继续去掉第m个数。由此,从(n,m)的问题变成了(n - 1,m)的子问题,其中若是(n - 1,m)的子问题返回的最后一个数是x,则(n,m)返回的结果就是(m+x)%n
public int LastRemaining_Solution (int n, int m) {
// write code here
// 没有小朋友的情况
if(n == 0 || m == 0){
return -1;
}
// 当只有一个人时,这个人的编号为0
int x = 0;
// 从小到大,更新x
for(int i = 2; i <= n; i++){
x = (m + x) % i;
}
return x;
}
}