// 贪心算法,当前遇到的数,比栈顶的元素小,就将栈顶元素给弹出,直至遇到比栈顶大或者是栈为空才停止,字符串保证是一个正常的数字序列。class Solution { public: string removeKdigits(string num, int k) { std::vector<int> S;//为了遍历,因此可以用vector来进行模拟。 std::string result = "";// 保存最后的结果 for(int i=0; i<num.size(); ++i) //开始遍历整个string { int number = num[i] - ‘0‘;// 算出当前的值 while(S.size()>0 && number<S[S.size()-1] && k>0)// 开始进行贪心判断 { S.pop_back(); --k; }// 否则,如果number是0 并且S中有元素照样可以放置进去 if(number!=0 || S.size()!=0) { S.push_back(number); } }//已经遍历完了所有的字符序列 这个时候如果k>0 仍需要进行弹出,这个时候,栈中的元素就是按照升序进行存储的了。 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 == "") result = "0"; return result; } };
原文地址:https://www.cnblogs.com/randyniu/p/9334144.html
时间: 2024-11-09 09:03:25