题目描述:

解题思路:
这道题我们可以通过定义一个list集合去解决它。首先我们把所有的元素加入到list集合里,因为题目要求每次从n个数中删除第m个数,假如m是3,n是5,那么第一次删除的就是m-1下标的元素,而第二次删除的就是m-2下标开始数,第3个元素也就是m + m - 1下表的元素,但是因为此时下标已经越界了,此时我们可以通过取余去找到这个元素的下标,但是因为每次都会删除一个元素,n会不断减少,取余时n也要跟着减少才行。当list只剩最后一个,把那个元素取出来即可。
代码实现:
class Solution {
public int lastRemaining(int n, int m) {
List<Integer> list = new ArrayList<>();
for(int i = 0; i < n; i++){
list.add(i);
}
int index = 0, j = 0;
while(list.size() > 1){
index = (index + m - 1) % (n - j);
list.remove((int)index);
j++;
}
return list.get(0);
}
}
执行结果:

本文介绍了一种使用Java List解决约瑟夫环问题的方法。通过定义List并结合取余运算来确定每次删除元素的位置,实现了从n个数中按特定规律移除元素直至最后剩下单一元素的过程。
172万+

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



