题目描述:
解题思路:
这道题我们可以通过定义一个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);
}
}
执行结果: