剑指offer25

186 阅读1分钟

题目描述

0,1,...,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。

解题思路分析

这个分析还是挺麻烦的,剑指offer书本分析的很好,我就直接上代码了 递归公式

代码实现

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;
}