LeetCode 402 移掉K位數字

2021-10-09 12:41:47 字數 979 閱讀 8248

思路:

要使得移掉k位數字後,剩下的數字最小,需要從頭開始移除掉最大的k個元素,這k個元素都滿足:比後面一位元素大,即在原始數字中呈現的是逆序狀態,需要將其刪除

使用單調棧來進行刪除,棧內滿足棧底到棧頂從小到大排列

從頭開始遍歷所給數字

1)若當前數字比棧頂數字大或等於,則壓入棧中;

2)若當前數字比棧頂數字小,則出現了逆序,需要將棧頂元素彈出,直至棧頂元素小於等於當前數字為止,彈出的過程,也就是刪除元素的過程,一共需要刪除k個元素,所以當一共彈出了k個元素後,就不需要再彈出任何元素了,將剩餘數字都壓入棧中

最後,將棧中元素彈出進行拼接,並取掉前導零,即可得到最終結果

public string removekdigits(string num, int k) 

dequestack = new arraydeque<>();

char numchar = num.tochararray();

for (int i = 0; i < numchar.length; i++)

// 將當前數字壓入棧內

stack.push(numchar[i]);

}// 若所給數字無逆序,或逆序的個數不夠k個,則需要將最後面的彈出,直至一共彈出k個

while (k > 0 && !stack.isempty())

// 對棧內剩餘數字進行拼接

stringbuilder sb = new stringbuilder();

while (!stack.isempty())

// 取掉前導0

int trimindex = 0;

while (trimindex < sb.length()) else

}if (trimindex == sb.length())

return sb.substring(trimindex, sb.length());

}

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