题目
- Total Accepted: 18524
- Total Submissions: 70922
- Difficulty: Medium
- Contributor: LeetCode
Given a non-negative integer num represented as a string, remove k digits from the number so that the new number is the smallest possible.
Note:
- The length of num is less than 10002 and will be ≥ k.
- The given num does not contain any leading zero.
Example 1:
Input: num = "1432219", k = 3 Output: "1219" Explanation: Remove the three digits 4, 3, and 2 to form the new number 1219 which is the smallest.
Example 2:
Input: num = "10200", k = 1 Output: "200" Explanation: Remove the leading 1 and the number is 200. Note that the output must not contain leading zeroes.
Example 3:
Input: num = "10", k = 2 Output: "0" Explanation: Remove all the digits from the number and it is left with nothing which is 0.https://leetcode.com/problems/remove-k-digits/#/description
思路
题目给定一个整数串,希望拿掉k个数字后,得到的整数串值最小
。
使用贪心算法,去掉从左到右,第一次比它后面的数字大的数字。
源程序
class Solution {
public:
string removeKdigits(string num, int k) {
int i,n = num.size();
if(k >= n) {
return "0";
}
while(k) {
bool f = false;
for (i = 0; i < num.size() - 1; i++) {
if(num[i] > num[i + 1]) {
f = true;
num = num.erase(i, 1);
break;
}
}
if(!f) {
num = num.substr(0, num.size() - 1);
}
k--;
}
while(num.size() > 1 && num[0] == '0') num = num.substr(1);
return num;
}
};