面试题62. 圆圈中最后剩下的数字

面试题62. 圆圈中最后剩下的数字

思路:f(n,m) = (f(n-1,m)+m)%n。约瑟夫问题

写法1

class Solution {
public:
    int lastRemaining(int n, int m) {
        if(n==1) return 0;
        return (lastRemaining(n-1, m)+m)%n;//f(n,m) = (f(n-1,m)+m)%n
    }
};

写法二

class Solution {
public:
    int lastRemaining(int n, int m) {
        int res = 0;
        for(int i=2;i<=n;i++)
            res = (res+m)%i;
        return res;
    }
};
发布了248 篇原创文章 · 获赞 29 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_38603360/article/details/105192142