考察点:栈,贪心;
思路:贪心的思路就是从左往右遍历,第一个遇到的char要放入栈中,后面的char如果小于栈顶元素,应该出栈,更换栈顶元素。
C++ 代码:
class Solution {
public:
string removeKdigits(string num, int k) {
if (k == num.size() || num.size() == 0) return "0";
int digits = num.size() - k;
//vector<char> sta(num.size(), '0');
stack<char> sta;
int sum=0;
int top = 0;
for (int i=0; i<num.size(); i++) {
char temp = num[i];
while (sta.size() > 0 && sta.top() > temp && k>0) {
sta.pop();
k--;
}
sta.push(temp);
}
stack<char> sta_2 ;
while (sta.size()) {
sta_2.push(sta.top());
sta.pop();
}
while (sta_2.size() && sta_2.top() == '0') {
sta_2.pop();
}
string result;
if (sta_2.size() == 0) {
return "0";
} else {
int index=0;
while (sta_2.size() && index < digits) {
result += sta_2.top();
sta_2.pop();
index++;
}
}
return result;
}
};