402. 移掉K位數字
阿新 • • 發佈:2018-12-05
給定一個以字串表示的非負整數 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。
class Solution { public: string removeKdigits(string num, int k) { std::vector<int> S;//當作棧 std::string result = "";//儲存結果 for(int i = 0; i < num.size(); i++) { int number = num[i] - '0'; //字元轉整數 while(S.size() != 0 && S[S.size() - 1] > number && k > 0) {//棧頂元素大於number S.pop_back(); k--; } if(number != 0 || S.size() !=0) { S.push_back(number);//將數字入棧 } } while(S.size() != 0 && k != 0) { S.pop_back(); k--; } for(int i = 0; i < S.size(); i++) { result.append(1,'0' + S[i]); } if(result == "") { return "0"; } return result; } };