今天的刷題有點燒腦袋,但是仔細想想,還真是覺得很神奇!
每次看到網友的題解,都會滿是佩服,真是太厲害了吧,我也希望我能夠有那天,555!
題目:
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
題解:
C代碼:
int lastRemaining(int n,int m)
{
int i,x;
x=0;
for(i=2;i<=n;i++)
x=(x+m)%i;
return x;
}
剛好最近在學習Python3,用Python3的代碼顯示如下:
class Solution:
def lastRemaining(self,n:int,m:int)->int:
x=0;
for i in range(2,n+1):
x=(x+m)%i
return (x)
運行結果:
這個其實 是一個約瑟夫環 的問題,裏面有一連串的各種問題,但是最後總結出來,都是採用倒推的方式進行!!!