給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。輸入: num = "1432219", k = 3輸出: "1219"
解釋: 移除掉三個數字 4, 3, 和 2 形成乙個新的最小的數字 1219。
輸入: num = "10200", k = 1輸出: "200"
解釋: 移掉首位的 1 剩下的數字為 200. 注意輸出不能有任何前導零。
考慮k = 1的情況,也就是說從num中刪除乙個字元使其最小,那麼我們要做的就是從左向右找到第乙個數比其下個數大即可,對於k = n的情況我們可以做n次上述操作,但明顯會超時。
換個角度來考慮,只要當前數字比前乙個數字小,那麼前乙個數字就有可能被刪除。
維護乙個遞增的棧,遍歷num,如果當前數字比棧頂元素大,就加入棧,若是小那麼就一直出棧,知道棧頂元素小於等於當前數字。
python
class solution:
def removekdigits(self, num: str, k: int) -> str:
if len(num) == k:return '0'
s, j = , 0
for i in num:
while s and i < s[-1] and j < k:
s.pop()
j += 1
return str(int(''.join(s)[:len(num)-k]))
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 解釋 移...