LeetCode 390 消除遊戲

2022-04-29 17:12:07 字數 925 閱讀 1899

給定乙個從1 到 n 排序的整數列表。

首先,從左到右,從第乙個數字開始,每隔乙個數字進行刪除,直到列表的末尾。

第二步,在剩下的數字中,從右到左,從倒數第乙個數字開始,每隔乙個數字進行刪除,直到列表開頭。

我們不斷重複這兩步,從左到右和從右到左交替進行,直到只剩下乙個數字。

返回長度為 n 的列表中,最後剩下的數字。

示例:

輸入:

n = 9,

1 2 3 4 5 6 7 8 9

2 4 6 8

2 66

輸出:6

1. 遞迴

邊界條件

if (n == 1)

return 1;

if (n <= 4)

return 2;

遞迴規律:

考慮到邊界條件,n > 4.

由於n9和n8,第一次消除之後結果完全一樣,故後面結果都一致。故把所有n都當做偶數處理

if(n % 2 != 0)

n -= 1;

解題思路

2. 暴力破解,迴圈

將[1, n]用列表儲存,迴圈判斷,每次劃掉一批數,或者將這批數置位0,當只有乙個數輸出。

int lastremaining(int n) {

if (n == 1)

return 1;

if (n <= 4)

return 2;

if (n % 2 != 0)

n -= 1;

if (n % 4 != 0)

return 4 * lastremaining(n / 4);

else

return 4 * lastremaining(n / 4) - 2;

Leetcode 390 消除遊戲 遞迴

給定乙個從1 到 n 排序的整數列表。首先,從左到右,從第乙個數字開始,每隔乙個數字進行刪除,直到列表的末尾。第二步,在剩下的數字中,從右到左,從倒數第乙個數字開始,每隔乙個數字進行刪除,直到列表開頭。我們不斷重複這兩步,從左到右和從右到左交替進行,直到只剩下乙個數字。返回長度為 n 的列表中,最後...

Leetcode 390 消除遊戲 C

給定乙個從1 到 n 排序的整數列表。首先,從左到右,從第乙個數字開始,每隔乙個數字進行刪除,直到列表的末尾。第二步,在剩下的數字中,從右到左,從倒數第乙個數字開始,每隔乙個數字進行刪除,直到列表開頭。我們不斷重複這兩步,從左到右和從右到左交替進行,直到只剩下乙個數字。返回長度為 n 的列表中,最後...

390 消除遊戲(python

題目 給定乙個從1 到 n 排序的整數列表。首先,從左到右,從第乙個數字開始,每隔乙個數字進行刪除,直到列表的末尾。第二步,在剩下的數字中,從右到左,從倒數第乙個數字開始,每隔乙個數字進行刪除,直到列表開頭。我們不斷重複這兩步,從左到右和從右到左交替進行,直到只剩下乙個數字。返回長度為 n 的列表中...