思路:
要使得移掉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 解釋 移...