leetcode402移掉K位數

2021-09-29 02:25:04 字數 1338 閱讀 7382

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

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

num 不會包含任何前導零。

示例 1 :

輸入: num = 「1432219」, k = 3

輸出: 「1219」

解釋: 移除掉三個數字 4, 3, 和 2 形成乙個新的最小的數字 1219。

思路:其實這種模擬題沒那麼簡單,但是往往你各方面情況都想清楚後,才能夠很好的處理。

同時你寫的**能處理一定的情況,但是得想想能不能處理所有的情況。

思路一:刪除,j>j+1的即可,即for迴圈k次,每次從前面往後找。

找到j>j+1刪除k,再處理0,

class

solution

return sb.

tostring()

;}}

方法二: 單調棧

class

solution

int n = num.

length()

; stack

stack =

newstack

<

>()

;int i =0;

for(

; i < n; i++

)int val = num.

charat

(i)-

'0';

//新增自己之前要把比自己小的全pop()出來

while

(!stack.

isempty()

&& val < stack.

peek()

&& k >0)

//如果棧為空,並且自己是0的話不允許新增if(

!stack.

isempty()

|| val !=0)

}//這是因為在k還沒有用完的情況下,遇到的剩下的序列全是遞增的,則需要從後向前刪除

while

(k >0)

stringbuilder str =

newstringbuilder()

;while

(!stack.

isempty()

)if(i < num.

length()

)//這是因為 (10 , 1)這樣的類似案例

return str.

length()

==0?"0"

: str.

tostring()

;}}單調棧,用在比較大小的時候,方便而已,但是需要自己去處理特殊情況。

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

LeetCode 402 移掉k位數字

給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。注意 示例 1 輸入 num 1432219 k 3 輸出 1219 解釋 移除掉三個數字 4,3,和 2 形成乙個新的最小的數字 1219。示例 2 輸入 num 10200 k 1 輸出 200 解釋 移掉首位...