移除一个使用字符串表示的非负整数num,将num中的k个数字移除,求移除k个数字后,可以获得的最小的可能的新数字。
#include<vector>
#include<string>
class Solution
{
public:
Solution() {}
~Solution(){}
std::string removeKdigits(std::string num, int k)
{
std::vector<int> S; //使用vector当做栈(因为vector可以遍历)
std::string result = ""; //存储最终结果的字符串
for (unsigned int i = 0; i < num.length(); i++) //从最高为循环扫描数字num
{
int number = num[i] - '0'; //将字符型的num转化为整数使用
while (S.size()!=0 &&S[S.size()-1]>number &&k>0)
{
S.pop_back(); //当栈不为空,栈顶元素大于数number,仍然可以删
k--;
}
if (number!=0||S.size()!=0) //栈不为空或者数字不为0
//当栈为空且number为0时,不能将该number加入栈中。
{
S.push_back(number);
}
}
while (S.size() !=0 &&k>0)
{
S.pop_back();
k--;
}
for (unsigned i = 0; i < S.size(); i++)
{
result.append(1, '0' + S[i]); //整数转字符
}
if (result=="")
{
result = "0";
}
return result;
}
};
int main()
{
Solution solve;
std::string result = solve.removeKdigits("1432219", 3);
printf("%s\n",result.c_str());
std::string result2 = solve.removeKdigits("100200", 1);
printf("%s\n", result2.c_str());
return 0;
}
运行结果
1219
200