LeetCode 402 移掉K位數字 HERODING的LeetCode之路

HERODING23發表於2020-11-15

給定一個以字串表示的非負整數 num,移除這個數中的 k 位數字,使得剩下的數字最小。

注意:

num 的長度小於 10002 且 ≥ k。
num 不會包含任何前導零。

示例 1 :

輸入: num = “1432219”, k = 3
輸出: “1219”
解釋: 移除掉三個數字 4, 3, 和 2 形成一個新的最小的數字 1219。

示例 2 :

輸入: num = “10200”, k = 1
輸出: “200”
解釋: 移掉首位的 1 剩下的數字為 200. 注意輸出不能有任何前導零。

示例 3 :

輸入: num = “10”, k = 2
輸出: “0”
解釋: 從原數字移除所有的數字,剩餘為空就是0。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/remove-k-digits
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解題思路:
思路其實很簡單,就是遍歷num,放入res中,如果比遍歷到的數字要大,就彈出,最後考慮一下res首部是0的情況還有res為空的情況,程式碼如下:

class Solution {
public:
    string removeKdigits(string num, int k) {
        // 儲存結果
        string res;
        int len = num.size();
        int m = len - k;
        if(len == k){
            return "0";
        }
        for(int i = 0; i < len; i ++){
            // 如果k不為0且res長度不為0且最後的數大於遍歷到的數字
            while(k && res.size() && res.back() > num[i]){
                res.pop_back();
                -- k;
            }
            res.push_back(num[i]);
        }
        res.resize(m);
        while(!res.empty() && res[0] == '0'){
            res.erase(res.begin());
        }
        if(!res.empty()){
            return res;
        }else{
            return "0";
        }
    }
};


/*作者:heroding
連結:https://leetcode-cn.com/problems/remove-k-digits/solution/zui-rong-yi-li-jie-de-si-lu-by-heroding/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。*/

相關文章