剑指offer25

题目描述

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;
}
复制代码
相关文章
相关标签/搜索