移除K个数字
题目:
已知一个使用字符串表示的非负整数num,将num中的k个数字移 除,求移除k个数字后,可以获得的最小的可能的新数字。
输入 : num = “1432219” , k = 3
在去掉3个数字后得到的很多很多可能里,如1432、4322、2219、1219、1229…;
去掉数字4、3、2得到的1219最小!
解题图解:
解题代码:
// 3.移除k个数字.cpp
#include <iostream>
#include<string>
#include<vector>
using namespace std;
class MyClass
{
public:
string getMinNumber(string nums, int k) {
vector<int> v;
string result = "";
for (int i = 0; i < nums.length(); i++)
{
int number = nums[i] - '0';
while (v.size() != 0 && v[v.size() - 1] > number && k > 0) {
v.pop_back();
k--;
}
if (v.size() != 0 || number != 0) {
v.push_back(number);
}
}
while (v.size() != 0 && k > 0) {
v.pop_back();
k--;
}
for (int i = 0; i < v.size(); i++)
{
result.append(1, '0' + v[i]);
}
return result;
}
private:
};
int main()
{
//测试
string s = "1432219";
MyClass cls;
string s1 = cls.getMinNumber(s, 3);
cout << s1 << endl;
}
感谢观看。