402. 移掉K位数字
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。
在保持顺序的情况下,尽可能让较小的数充当较高位。
用一个栈来计较。
如果要进的数字比栈顶要大,并且可以删。直接将该数字丢弃。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class Solution { public: string removeKdigits(string num, int k) { std::vector<int> S; std::string result = ""; for(int i = 0; i < num.length(); i++){ int number = num[i]-'0'; while(S.size() != 0 && S[S.size()-1] > number && k > 0){ 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; } };
|