leetcode 402 移掉K位數字

2021-10-08 08:43:51 字數 1357 閱讀 3853

402. 移掉k位數字

給定乙個以字串表示的非負整數 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。

首先計算出最終會有多少個保留的數

如果待加入的數小於棧頂的數,就彈棧,在彈棧的時候,待刪除的數的數量減一

如果是遞增的,或者已經沒有要刪除的數了,那麼直接加入棧中。

最後輸出棧中的元數,並且將左邊的0去掉,如果去掉左0之後為空則返回 『0』

注意:可能沒有那麼多需要刪除的數字,例如陣列是乙個遞增的陣列,那麼我們就取前面的位次。

class

solution

:def

removekdigits

(self, num:

str, k:

int)

->

str:

ifnot num:

return

'0' n =

len(num)

if n == k:

return

'0' remain = n - k#計算最終列表中會有多少個元素,取前面的多少位

stack =

[num[0]

]for i in

range(1

, n)

:while stack and num[i]

< stack[-1

]and k:

#棧頂元數大於待加入的元數,並且還能彈出,則彈棧

stack.pop(

) k -=1)

#直到不能彈棧就入棧,這會導致之後元數都會入棧

print

(stack)

return

''.join(stack[

:remain]

).lstrip(

'0')

or'0'

#如果輸出為空,則輸出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 解釋 移...