leetcode打卡001-约瑟夫问题

约瑟夫问题

其背景故事是关于一组人站成一个圈,从某个人开始报数,每数到特定数字的人将被淘汰出圈,然后从被淘汰人的下一个人重新开始报数,直到最后剩下一个人。问题的目标是确定最后剩下的那个人在最初的位置。

关键词

递归,递归的逻辑
在这里插入图片描述

解释

从0开始给给n个人标记,0,1,2……n-1
n=1时 已经满足题目要求了,只剩下一个人,直接返回下标0
当n>1时 思考一下,下一趟(即递归中的J(n-1,m))喊1的人在上一趟(即递归中的J(n,m))中的位置是 (J(n-1,m)+m)%n
(J(n-1,m)+m) 理解如下:
举个例子:n = 3 (下标 0,1,2) m = 2
第一趟:0,1(√),2 下标1的被淘汰
从2开始报1 ,与第一趟同一个角度:假设报1的是下标理论上应该是0(第一趟的下标是0),现在的2下标是2,他理论下标是0(引入理论下标是为了喊号到m),但是他在上一趟的实际下标是2,当前理论下标与实际下标之间相差(0,2)为2,就是m,所以 (J(n-1,m)+m)就是这样来的
而 (J(n-1,m)+m)%n这样是因为有时候m>n,超过了一圈人数,所以得取模

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值