LeetCode No.5 移掉K位數(shù)字

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.結果

提交結果
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容