力扣 402移掉K位數字

2021-10-08 19:58:05 字數 970 閱讀 7873

題目描述

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

注意:num 的長度小於 10002 且 ≥ k。

num 不會包含任何前導零。

示例 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。

解題思路

看到這道題,感覺到無從下手,首先想到的就是列舉所有可能,然後找出最小的,可想而知肯定會超時。做這種題必須得靠技巧,看了別人大佬得解法後才覺得妙,具體的可以看這篇描述使用乙個棧,首先第乙個數字進棧,然後後面元素進棧時判斷和棧頂元素的大小,如果當前棧頂元素比新進棧元素大,就彈出。

class solution(object):

def removekdigits(self, num, k):

stack =

remain = len(num) - k

for digit in num:

while k and stack and stack[-1] > digit:

stack.pop()

k -= 1

return "".join(stack[0: remain]).lstrip('0')

s = solution()

print(s.removekdigits("10200", 1))

402 移掉K位數字

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

402 移掉K位數字

給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。維護乙個單調遞增棧,解決拆開的最值問題 class solution q.offerlast num.charat i for int i 0 i k i stringbuffer sb newstringbuff...

力扣解題思路 402 移掉K位數字 糾錯記錄

思路 這一題寫出來還算順利,不過主要得益於我看了題目的標籤,不然我可能不會採用棧 o 我首先觀察題目所給的例子,然後在草稿紙上模擬一下整個過程,具體是這樣的 遇到比棧頂更大的元素就直接出棧,若比棧頂小則說明此時棧頂是棧中最大的元素,在k大於0的情況下棧頂出棧,知道當前元素滿足入棧條件 stack s...