LeetCode 402. Remove K Digits
来源:互联网 发布:sql复制表结构 编辑:程序博客网 时间:2024/05/24 00:07
本题题目大意是给出一个数字num(string形式),要求删除其中的k位,使得删除后得到的数字最小。比如num = “1432219”, k = 3,则输出就应该是”1219”。
这一题可以用贪心的思想解决,删除k位其实就相当于k次删除一位,给出一个数字,删除一位的策略很明显就是删除一个尽量靠前且尽量大的数字,比如例子中的”1432219”,显然删除4最好,依据是显然删除大的数字好,但因为不能改变顺序,num中靠前的数字在结果中也靠前,重要性更高,所以要尽量靠前且尽量大,转化一下就是从num的头开始找,找到第一个下降前的数字中最大的一个,然后删除,重复k次。
这里要注意题目要求输出的数字中不能有‘0’打头,那就找到第一个不是‘0’的数并把前边的‘0’全部删除就可以了,如果都是‘0’就要记得返回一个“0”。
#include <iostream>#include <string>#include <cstdlib>using namespace std;class Solution { public: string removeKdigits(string num, int k) { if (num.empty() || k == 0) return num; string::iterator erase_it; while (k--) { erase_it = num.begin(); for (string::iterator it = num.begin() + 1; it != num.end(); ++it) { if (*erase_it < *it) erase_it = it; else if (*erase_it > *it) break; } num.erase(erase_it); } size_t found = num.find_first_not_of("0"); if (found == string::npos) num = "0"; else num = num.substr(found); return num; }};int main(int argc, char const *argv[]) { Solution s; cout << s.removeKdigits("100200", 2) << endl; system("pause"); return 0;}
0 0
- 【Leetcode】402. Remove K Digits
- leetcode 402. Remove K Digits
- LeetCode 402. Remove K Digits
- [LeetCode]402. Remove K Digits
- leetcode 402. Remove K Digits
- LeetCode 402. Remove K Digits
- [leetcode]402. Remove K Digits
- LeetCode 402. Remove K Digits
- LeetCode 402. Remove K Digits
- [LeetCode] 402. Remove K Digits
- [LeetCode]402. Remove K Digits
- LeetCode 402. Remove K Digits
- leetcode-402. Remove K Digits
- leetcode 402. Remove K Digits
- Leetcode: 402. Remove K Digits
- LeetCode: Remove K Digits
- [LeetCode]Remove K Digits
- leetcode:Remove K Digits
- iOS MQTT 协议应用
- PHP之WAMP的配置(二)
- 多层级标签的提交,利用jquery拼接json,后台转java对象
- MyBatis 一对多关系
- excel添加超链接
- LeetCode 402. Remove K Digits
- 用Maven实现一个protobuf的Java例子
- Anndroid学习---使用线程Handler
- mysql字母数字混合排序
- map迭代方法
- 抽象类和普通类的区别
- 组合计数(容斥定理+卢卡斯定理的正确姿势)
- BZOJ 4809: 皇后 (n皇后问题)dfs搜索入门
- 使用python批量爬取apk文件