week15- NO.402. Remove K Digits

来源:互联网 发布:nginx conf配置详解 编辑:程序博客网 时间:2024/06/06 10:42

题目

  • 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 = 3Output: "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 = 1Output: "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 = 2Output: "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;    }};



原创粉丝点击