LeetCode402 移掉K位數字

2021-10-01 20:05:41 字數 1305 閱讀 5757

給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。

注意:

示例 1 :

輸入: num = "1432219", k = 3

輸出: "1219"

解釋: 移除掉三個數字 4, 3, 和 2 形成乙個新的最小的數字 1219。

示例 2 :

輸入: num = "10200", k = 1

輸出: "200"

解釋: 移掉首位的 1 剩下的數字為 200. 注意輸出不能有任何前導零。

示例 3 :

輸入: num = "10", k = 2

輸出: "0"

解釋: 從原數字移除所有的數字,剩餘為空就是0。

乙個很明顯的移除方法是找出所有的:

n um

[i]>nu

m[i+

1]num[i]>num[i + 1]

num[i]

>nu

m[i+

1]刪除num[i+1]

也就是說:前乙個(高位)數比後乙個(低位)數要更大,則刪除前乙個(高位)數。這個想法很好理解,就是使用更小的數字去取代原來的高位數字,這麼一來num的數值就變小了。

我們假設k足夠大,反覆執行該操作,會使得num變成乙個非遞減數,也就是說其中的數字從高位到低位是非遞減的。

對於非遞減數num,我們需要做的是不斷移除num中最大的數字,因為該數是非遞減的,所以最大的數字一定是在最後面。

最後,刪除前導0,判斷num是否為空就行了。

1、將num變為非遞減數

非遞減數:「123455567899」

遞增數:「123456789」

有兩種情況:

**:

for (int i = 1; i < num.size(); i++) 

}

2、對於非遞減數的處理

從末位開始刪除數字,直到k=0為止

綜合以上兩點,**:

leetcode402移掉K位數

給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。注意 num 的長度小於 10002 且 k。num 不會包含任何前導零。示例 1 輸入 num 1432219 k 3 輸出 1219 解釋 移除掉三個數字 4,3,和 2 形成乙個新的最小的數字 1219。思路...

LeetCode 402 移掉K位數字

給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。注意 num 的長度小於 10002 且 k。num 不會包含任何前導零。示例 1 輸入 num 1432219 k 3 輸出 1219 解釋 移除掉三個數字 4,3,和 2 形成乙個新的最小的數字 1219。示例...

LeetCode 402 移掉K位數字

題目鏈結 題目描述 給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。注意 示例 輸入 num 1432219 k 3 輸出 1219 解釋 移除掉三個數字 4,3,和 2 形成乙個新的最小的數字 1219。輸入 num 10200 k 1 輸出 200 解釋 移...