Leetcode 402 移掉K位數字 C

2021-10-07 19:04:50 字數 1190 閱讀 7259

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

單調棧

我們可以維持乙個單調遞增棧,也就是說有出現遞減的情況,我們就需要刪除數字。但因為限制了刪除次數,因此我們只能在允許刪除次數內維持遞增棧。

另外,如果最後還剩餘刪除次數,我們就把低幾位刪掉。詳細過程見**

string removekdigits

(string num,

int k)

if(num[i]

=='0'

&& sp.

empty()

)while

(num[i]

=='0'

) i++

;///避免前導0

else sp.

push

(num[i++])

;}if(k!=

0&& k >= sp.

size()

)return

"0";

string ans="";

while

(!sp.

empty()

) ans = ans.

substr

(k);

//刪掉低k位數

reverse

(ans.

begin()

,ans.

end())

; ans +

= num.

substr

(i);

if(ans ==

"") ans =

"0";

return ans;

}

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 解釋 移...