使用栈来解题。
主要思想:一个n位数,如果第i位比第i+1位要大,那么删掉第i位得到的数要比删掉第i+1位得到的数要小。
给定一个栈,result
入栈过程:
int i = 0;
while(i < num.size()){
while(k && result.size() && result.back() > num[i]){
result.pop_back();
k--;
}
result.push_back(num[i++]);
}
最后答案:
class Solution {
public:
string removeKdigits(string num, int k) {
string result = "";
int i = 0;
while(i < num.size()){
while(k && result.size() && num[i] < result.back()){
result.pop_back();
k--;
}
result.push_back(num[i++]);
}
i = 0;
while(i < result.size()){
if(result[i] != '0')
break;
i++;
}
result = result.substr(i, result.size() - k);
return result.empty() ? "0" : result;
}
};

本文介绍了一种使用栈解决数学问题的方法,特别关注于如何通过删除指定数量的数字以获得最小可能的数值。通过实例讲解了算法的具体实现过程,包括如何遍历数字、比较并决定是否从结果中移除元素。

192

被折叠的 条评论
为什么被折叠?



