0,1,n-1這n個數字排成乙個圓圈,從數字0開始,每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後乙個數字。一開始打算用鍊錶暴力模擬。例如,0、1、2、3、4這5個數字組成乙個圓圈,從數字0開始每次刪除第3個數字,則刪除的前4個數字依次是2、0、4、1,因此最後剩下的數字是3。
然後嘗試了下遞迴就有了這道題的思路
實際上是乙個從大轉化到小的問題
大:每一次f(n,m)就是在n個數中,進行n-1次第m值刪減後得到的值。
當為f(n-1,m)時,此時數列的順序與f(n,m)時已經發生了變化。所以我們需要想辦法進行轉化。
我們讓被刪節點的後一節點為第乙個節點。此節點與原數列的節點的關係為:((m-1)%n+x+1)%n//其中x為f(n-1,m)中的值
理解了後**實現其實就很簡單了。
class
solution
};
面試題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 圓圈中最後剩下的數字
題目 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 ...