力扣解題思路 402 移掉K位數字 糾錯記錄

2021-10-11 17:40:31 字數 2146 閱讀 9717

思路:

這一題寫出來還算順利,不過主要得益於我看了題目的標籤,不然我可能不會採用棧/(ㄒoㄒ)/~~

我首先觀察題目所給的例子,然後在草稿紙上模擬一下整個過程,具體是這樣的:遇到比棧頂更大的元素就直接出棧,若比棧頂小則說明此時棧頂是棧中最大的元素,在k大於0的情況下棧頂出棧,知道當前元素滿足入棧條件:

stack

stack =

newstack

<

>()

;int i =0;

while

(i < num.

length()

)else

} stack.

add(num.

charat

(i))

; i++

;}

當然,退出這個while迴圈後k可能還是大於0的,那麼這時候直接讓棧頂出棧即可,因為棧頂就是最大的元素:

while

(k >0)

stringbuilder sb =

newstringbuilder()

;while

(!stack.

isempty()

) sb.

(stack.

pop())

; string str = sb.

reverse()

.tostring()

;

接下來去除頭部的0:

int p =0;

while

(p < str.

length()

&& str.

charat

(p)==

'0') p++

;

經過上面的去0操作,可能導致結果為空串,所以返回這裡再加乙個判斷:

return str.

substring

(p,str.

length()

).equals(""

)?"0":str.

substring

(p,str.

length()

);

完整**如下:

public string removekdigits

(string num,

int k)

else

} stack.

add(num.

charat

(i))

; i++;}

while

(k >0)

stringbuilder sb =

newstringbuilder()

;while

(!stack.

isempty()

) sb.

(stack.

pop())

; string str = sb.

reverse()

.tostring()

;int p =0;

while

(p < str.

length()

&& str.

charat

(p)==

'0') p++

;return str.

substring

(p,str.

length()

).equals(""

)?"0":str.

substring

(p,str.

length());}

實際上,不用棧也有更簡潔的解法,思路和使用棧是一樣的:從左到右,找第乙個比後面大的字元,刪除,清零,k次掃瞄。

public string removekdigits

(string num,

int k)

return s.

tostring()

;}

力扣 402移掉K位數字

題目描述 給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。注意 num 的長度小於 10002 且 k。num 不會包含任何前導零。示例 1 輸入 num 1432219 k 3 輸出 1219 解釋 移除掉三個數字 4,3,和 2 形成乙個新的最小的數字 12...

402 移掉K位數字

給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。注意 num 的長度小於 10002 且 k。num 不會包含任何前導零。示例 1 輸入 num 1432219 k 3 輸出 1219 解釋 移除掉三個數字 4,3,和 2 形成乙個新的最小的數字 1219。示例...

402 移掉K位數字

給定乙個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。維護乙個單調遞增棧,解決拆開的最值問題 class solution q.offerlast num.charat i for int i 0 i k i stringbuffer sb newstringbuff...