給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。
注意:
示例 1 :
示例 2 :輸入: num = "1432219", k = 3
輸出: "1219"
解釋: 移除掉三個數字 4, 3, 和 2 形成乙個新的最小的數字 1219。
示例 3 :輸入: num = "10200", k = 1
輸出: "200"
解釋: 移掉首位的 1 剩下的數字為 200. 注意輸出不能有任何前導零。
乙個很明顯的移除方法是找出所有的:輸入: 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」
有兩種情況:
**:
2、對於非遞減數的處理for (int i = 1; i < num.size(); i++)
}
從末位開始刪除數字,直到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 解釋 移...