题目描述:让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列,不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,求最后一个小朋友。
解析:
①首先将所有元素装入list集合中;
②如果m-1大于n,则需要计算m-1 % n的余数;
③删除list中以余数为下标的元素,此时list的长度已经更新;
④继续数m-1,依然取余,直到list中剩下最后一个元素。
public int LastRemaining_Solution(int n, int m){
if (n==0) return -1;
ArrayList<Integer> list = new ArrayList<Integer>();
//将0-n存入list中
for (int i = 0; i < n; i++){
list.add(i);
}
//这里是防止m的长度大于n,当m大于n时,取余
int index = (m-1)%n;
while(list.size() != 0){
//删除下标为index的元素,即数到m-1的小朋友出圈
list.remove(index);
//从index开始继续数m-1
index = (index+m-1)%list.size();
}
//只剩下最后一个元素即为最后一个小朋友
return list.get(0);
}