[LeetCode]Delete Digits
来源:互联网 发布:java短信轰炸机源码 编辑:程序博客网 时间:2024/05/09 00:02
题目
Given string A representative a positive integer which has N digits, remove any k digits of the number, the remaining digits are arranged according to the original order to become a new positive integer.
Find the smallest integer after remove k digits.
N <= 240 and k <= N,
Example
Given an integer A = “178542”, k = 4
return a string “12”
解题思路
贪心的思想,从左到右扫描字符串,如果A[i] > A[i+1]则删除A[i],直至删除了k个数字为止。这样就能使得越小的数字排在最左边,从而使得删除了k个数字后的数最小。
⚠注意两个特殊情况:
- 如果扫描了一遍以后,已经删除了的数字(deleted_num)小于k个,甚至是A中所有数字升序排列,没有A[i] > A[i+1]的情况(此时deleted_num = 0),则要删除末尾的(k - deleted_num)个字符。
eg. 测试样例: A = “12345”, k = 2 - 执行了上述算法后,还需进行后处理,删除首位的零。
eg. 测试样例: A = “90249”, k = 2
输出应该是“24”,而不是“024”
代码如下:
#include <string>#include <iostream>using namespace std;class Solution {public: /** *@param A: A positive integer which has N digits, A is a string. *@param k: Remove k digits. *@return: A string */ string DeleteDigits(string A, int k) { // wirte your code here int deleted_num = 0; int n = A.size(); if(!A.empty() && n <= 240 && k < n){ for(auto i = A.begin(); i != A.end() - 1;){ if(*i > *(i + 1)){ A.erase(i); deleted_num++; if(i != A.begin()) i--; if(deleted_num == k) break; } else i++; } //⚠1 if(deleted_num < k){ A.erase(A.end() - (k - deleted_num), A.end()); } //⚠2 auto i = A.begin(); while(*i == '0') A.erase(i); } return A; }};
0 0
- [LeetCode]Delete Digits
- [LeetCode]Delete Digits
- Delete Digits
- lintcode:Delete Digits
- #182 Delete Digits
- *[Lintcode]Delete Digits
- [leetcode][math] Add Digits
- [leetcode] Add Digits
- 【leetcode】Add Digits【java】
- Leetcode: Add Digits
- LeetCode Add Digits
- [LeetCode] Add Digits
- leetcode 258: Add Digits
- 【LeetCode】258_Add Digits
- LeetCode题解:Add Digits
- leetcode: Add Digits
- 258Add Digits - LeetCode
- leetCode #258 Add Digits
- LeetCode - 155. Min Stack
- C++ - 计蒜客 - 跳跃的最小次数(bfs)武士风度的牛
- 【VS开发】修改MainFrame窗口名称1
- android 电源管理介绍
- UVA 11029 Leading and Trailing [数学]
- [LeetCode]Delete Digits
- (转)C++ 字符串类型转换为其他字符串
- HDOJ 4342 History repeat itself
- JSP中include指令和include动作浅析
- 文本框禁止浏览器缓存
- 如何编写异常安全的C++代码
- pl/sql变量类型
- 示波器入门之采样率、存储深度
- Android资源文件中各种XML的作用与解释