题目描述
0,1,2------n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字,求剩下的最后一个数字。
解法一:
用链表模拟圆环
import java.util.*;
public class Solution {
public int LastRemaining_Solution(int n, int m) {
if(n<1||m<1)
return -1;
LinkedList<Integer> list=new LinkedList();
for(int i=0;i<n;i++)
{
list.add(i);
}
int current=0;
while(list.size()>1)
{
for(int i=1;i<m;i++)
{
current++;
if(current == list.size())//每次遍历到结尾时回到链表起点
current=0;
}
list.remove(current);//remove了current后current作为index自动指向下一个节点
if(current == list.size())//若current == list.size(),current回到链表起点
current=0;
}
return list.get(0);
}
}
解法二:
找数学规律
约瑟夫环问题解析
本文探讨了经典的约瑟夫环问题,通过两种方法解决该问题:一是利用链表模拟圆环并逐步移除元素;二是寻找数学规律简化计算过程。提供了一种直观的链表实现方式,并为读者理解约瑟夫环问题提供了实用的代码示例。
269

被折叠的 条评论
为什么被折叠?



