圆圈中最后剩下的数字 问题陈述 0,1,……,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。 问题解法 基于ArrayList实现 123456789101112131415class solution{ public int lastRemaining(int n,int m){ ArrayList<Integer> list=new ArrayList<>(); for(int i=0;i<n;i++){ list.add(i); } int idx=0; while(n>1){ idx=(idx+m-1)%n;//此式可获得每轮第m个元素 list.remove(idx); n--; } return list.get(0); }} 基于约瑟夫环 1234567891011class Solution { public int lastRemaining(int n, int m) { int ans = 0; // 最后一轮剩下2个人,所以从2开始反推 for (int i = 2; i <= n; i++) { ans = (ans + m) % i; } return ans; }}