题解 | #孩子们的游戏(圆圈中最后剩下的数) 一个新的思路~#
孩子们的游戏(圆圈中最后剩下的数)
http://www.nowcoder.com/practice/f78a359491e64a50bce2d89cff857eb6
约瑟夫环的核心问题:从被删除的下一个下标开始计数可以转化成 从0开始计数加上上次删除的下标数
import java.util.*; public class Solution { public int LastRemaining_Solution(int n, int m) { if(n==0){ return -1; }else if(n==1){ return 0; } //记忆初始数字 int k = m; List<Integer> list = new ArrayList<>(); for(int i=0;i<n;i++){ list.add(i); } while(list.size()!=1){ //获取这次删除的下标 int del = m%list.size()-1; //恢复原来的数字 m=k; if(del<0){ del+=list.size(); } //记忆这次删除的下标数,从下一个下标开始计数可以转化成从0开始计数加上上次删除的下标 m+=del; list.remove(del); } return list.get(0); } }