1. 程式人生 > >LeetCode-402. Remove K Digits

LeetCode-402. Remove K Digits

https://leetcode.com/problems/remove-k-digits/description/

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.

題解:想了很久吧這題,之前用vector但是超時,後來發現string類也有push_back,back,pop_back之類的函式= =

class Solution {
public:
	string removeKdigits(string num, int k){
		int l = num.length();
		int n = l - k;
		string v;
		v.clear();
		if (k >= l || l == 0){
			return "0";
		}
		else if (k <= 0){
			return num;
		}
		for (int i = 0; i < l; i++){
			while (k > 0 && num[i] < v.back() && v.size() > 0){
				v.pop_back();
				k--;
			}
			v.push_back(num[i]);
		}
		string ans = "";
		for (int i = 0; i < n; i++){
			ans += v[i];
		}
		while (ans[0] == '0'){
			ans.erase(0, 1);
		}
		if (ans.length() != 0){
			return ans;
		}
		else {
			return "0";
		}
	}
};