0,1,...,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。java
这个分析仍是挺麻烦的,剑指offer书本分析的很好,我就直接上代码了 递归公式 spa
public int lastRemaining(int n, int m) {
if (n < 1 || m < 1) {
return -1;
}
int last = 0;
//使用循环实现,当n很大时也不会有很高的复杂度
for (int i = 2; i <= n; i++) {
last = (last + m) % i;
}
return last;
}
复制代码