CS-Notes/notes/62. 圆圈中最后剩下的数.md
2019-11-02 12:07:41 +08:00

29 lines
1.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 62. 圆圈中最后剩下的数
[NowCoder](https://www.nowcoder.com/practice/f78a359491e64a50bce2d89cff857eb6?tpId=13&tqId=11199&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github)
## 题目描述
让小朋友们围成一个大圈然后随机指定一个数 m让编号为 0 的小朋友开始报数每次喊到 m-1 的那个小朋友要出列唱首歌然后可以在礼品箱中任意的挑选礼物并且不再回到圈中从他的下一个小朋友开始继续 0...m-1 报数 .... 这样下去 .... 直到剩下最后一个小朋友可以不用表演
## 解题思路
约瑟夫环圆圈长度为 n 的解可以看成长度为 n-1 的解再加上报数的长度 m因为是圆圈所以最后需要对 n 取余
```java
public int LastRemaining_Solution(int n, int m) {
if (n == 0) /* 特殊输入的处理 */
return -1;
if (n == 1) /* 递归返回条件 */
return 0;
return (LastRemaining_Solution(n - 1, m) + m) % n;
}
```
<div align="center"><img width="320px" src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/githubio/公众号二维码-1.png"></img></div>