給定乙個以字串表示的非負整數 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 解釋 移掉首位...