約瑟夫環(超好的程式碼存檔)--19--約瑟夫環--LeetCode面試題62(圓圈最後剩下的數字)

我只是一個碼農發表於2020-05-24

圓圈中最後剩下的數字

    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 }

 

相關文章