- 设有n个同学,数为m,则最后一位排除的为f(n,m),第一位排除的为m%n
- f(n,m)第一次处理之后,第一位排除的同学为m%n,剩余n-1位同学,而n-1位同学若是从0开始,则最后一位排除的就是f(n-1,m),而此时却是从m%n开始,则最后一位排除的就是(f(n-1,m) + m%n) % n
- 则f(n,m) = (f(n-1,m) + m) % n
public class Solution { public int LastRemaining_Solution(int n, int m) { if(n < 1) { return -1; } int cache = 0; for(int i = 2; i <= n; i++) { cache = (cache + m ) % i; } return cache; } }