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;
}
複製代碼