圓圈中最後剩下的數字
0,1,,n-1這n個數字排成一個圓圈,從數字0開始,每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後一個數字。
例如,0、1、2、3、4這5個數字組成一個圓圈,從數字0開始每次刪除第3個數字,則刪除的前4個數字依次是2、0、4、1,因此最後剩下的數字是3。
示例 1:
輸入: n = 5, m = 3
輸出: 3
示例 2:
輸入: n = 10, m = 17
輸出: 2
限制:
1 <= n <= 10^5
1 <= m <= 10^6
1 class Solution { 2 public int lastRemaining(int n, int m) { 3 if (n == 1) 4 return 0; 5 int now = lastRemaining(n - 1, m); 6 return (m % n + now) % n; 7 } 8 /* 淘汰順序 9 n = 1:一個元素:0 0 最後一次淘汰的下標是0 10 n = 2:兩個元素:0 1 3 % 2 + 0 == 1 1 % 2 == 1 0 1 最後一次淘汰的下標是1 11 n = 3:三個元素:0 1 2 3 % 3 + 1 == 1 1 % 3 == 1 2 0 1 最後一次淘汰的下標是1 12 n = 4:四個元素:0 1 2 3 3 % 4 + 1 == 4 4 % 4 == 0 2 1 3 0 最後一次淘汰的下標是0 13 n = 5:五個元素:0 1 2 3 4 3 % 5 + 0 == 3 3 % 5 == 3 2 0 4 1 3 最後一次淘汰的下標是3 14 */ 15 }