1. LeetCode386題目鏈接鏈接
https://leetcode-cn.com/problems/remove-k-digits/comments/
2. 結題思路
題目的意思很簡單,就是移除兩位數(shù),剩下的數(shù)是最小的數(shù),前面不能有0??雌饋砺牶唵蔚?,動手就開始寫,第一天用的貪心算法,遞歸,越寫越麻煩。最后看了下題解,提出了用棧來解決,做開發(fā)這么久,雖然棧說的蠻多的,但是在實際中還真的沒有用到。方法也不太了解,然后剛好趁著這個題了解下。
//stack.peek()返回棧頂數(shù)據(jù)但不刪除
//stack.pop();返回棧頂數(shù)據(jù)并刪除
public String removeKdigits(String num, int k) {
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < num.length(); i++) {
int n = num.charAt(i) - '0';
while (!stack.isEmpty() && n < stack.peek() && k != 0) {
stack.pop();
k--;
}
if (n != 0 || !stack.isEmpty()) {
stack.push(n);
}
}
while (!stack.isEmpty() && k != 0) {
stack.pop();
k--;
}
if (stack.isEmpty()) {
stack.push(0);
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < stack.size(); i++) sb.append(stack.get(i));
return sb.toString();
}
3.結果

提交結果