leetcode 402 移掉K位數字 貪心演算法

2021-10-01 15:49:56 字數 1158 閱讀 6467

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

思路:採用貪心思想

從高位向低位遍歷,如果對應的數字大於下一位數字,則把該位數字去掉,得到的數字最小

最暴力的方法:去掉k個數字,即從最高位遍歷k次

使用棧儲存最終結果或刪除工作,從高位向地位遍歷num,如果遍歷的數字大於棧頂元素,則

將數字push入棧,如果小於棧頂元素則進行pop彈棧,直到棧為空或不能再刪除數字(k==0)或棧頂元素的值小於當前前元素的值。最後,從棧底遍歷到棧頂

思考如下問題:

1、當所有數字都掃瞄完成後,k仍然大於0,應該做怎樣的處理?

例如:num = 12345, k = 3時

2、當數字中有0出現時,應該有怎樣的特殊處理?

例如:num = 100200, k = 1時

3、如何將最後結果儲存為字串並返回?

**和解釋如下:

class

solution

if(number !=

0|| s.

size()

!=0)}

while

(s.size()

!=0&& k >0)

for(

int i =

0; i < s.

size()

; i++)if

(result =="")

return result;}}

;

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