劍指 Offer 62 圓圈中最後剩下的數字

2021-10-09 07:03:27 字數 834 閱讀 6098

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

通過次數44,225提交次數70,658

思路:

著名的約瑟夫環問題,需要經過推導求出遞推公式求解,以下是根據leetcode題解區的一位大佬的解釋,我覺得比較易懂,同時新增了一點自己理解的部分:

對於f(n,m)表示,n個數字,每次移動m個位置,進行n-1次移動和刪除,最後剩下的元素座標;

對於f(n-1,m)表示,n-1個數字,每次移動m個位置,進行n-2次移動和刪除,最後剩下的元素座標;

注意這裡的座標分別都是從0計數的,因此我們考慮這樣的流程,對於n個數字,首先進行一次刪除,則開頭的元素移動到座標(m%n),此時將這個位置重新視為0座標,則可以應用f(n-1,m),所以可以得出遞推公式f(n,m) = [(m%n)+f(n-1,m)]%n。

class

solution

return ans;}}

;

劍指 Offer 62 圓圈中最後剩下的數字

題目 題目描述 0,1,n 1這n個數字排成乙個圓圈,從數字0開始,每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後乙個數字。例如,0 1 2 3 4這5個數字組成乙個圓圈,從數字0開始每次刪除第3個數字,則刪除的前4個數字依次是2 0 4 1,因此最後剩下的數字是3。示例 1 輸入 n 5...

劍指 Offer 62 圓圈中最後剩下的數字

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 輸出 ...

劍指 Offer 62 圓圈中最後剩下的數字

劍指 offer 62.圓圈中最後剩下的數字 0,1,n 1這n個數字排成乙個圓圈,從數字0開始,每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後乙個數字。例如,0 1 2 3 4這5個數字組成乙個圓圈,從數字0開始每次刪除第3個數字,則刪除的前4個數字依次是2 0 4 1,因此最後剩下的數...