avatar

目录
2.3

题目402:给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。
测试用例 112,
思路要想使移除k个元素后的数最小,则应该移除最靠左的k个相邻逆序对,包括在一次移除后形成的新的逆序对.

c++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
string removeKdigits(string num, int k) {
string res;
int n = num.size(), m = n - k;
for (char c : num) {
while (k && res.size() && res.back() > c) {
res.pop_back();
--k;
}
res.push_back(c);
}
res.resize(m);
//去除前导0, 如10200,k = 1
while (!res.empty() && res[0] == '0') {
res.erase(res.begin());
}
return res.empty() ? "0" : res;
}
};
文章作者: Sunxin
文章链接: https://sunxin18.github.io/2020/02/03/2-3/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 lalala
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论