面試題62 圓圈中最後剩下的數字

2021-10-05 17:34:52 字數 894 閱讀 2339

題目:

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

**理解:**直觀做法,直接模擬過程,生成乙個長度為a的list,一直迴圈刪除下標m,刪除第m個數字。

def

lastremaining

(self, n:

int, m:

int)

->

int:

i, a =0,

list

(range

(n))

while

len(a)

>=

: i =

(i+m-1)

%len

(a)#尋找待刪除i的位置。對len(a)取餘。

a.pop(i)

return a[

0]

或者可以利用基於數學的方法:

class

solution

:def

lastremaining

(self, n:

int, m:

int)

->

int:

f=0for i in

range(2

, n+1)

: f=

(f+m)

%i return f

面試題62 圓圈中最後剩下的數字

面試題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...

面試題62 圓圈中最後剩下的數字

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

面試題62 圓圈中最後剩下的數字

1.重新理解題目 感覺題目對過程的描述不清楚,我們重新來理解題目 n個人站成一圓圈,編號分別為1 2 n,從編號1的人開始報數1,2,報到m時,這個報m的人出列 再從出列人的後一人開始重新報數1,2,報到m時,再出列 求佇列只剩1人時該人的編號。2.一行 解決 class solution 3.合理...