返回介绍

solution / 0400-0499 / 0402.Remove K Digits / README_EN

发布于 2024-06-17 01:04:01 字数 4123 浏览 0 评论 0 收藏 0

402. Remove K Digits

中文文档

Description

Given string num representing a non-negative integer num, and an integer k, return _the smallest possible integer after removing_ k _digits from_ num.

 

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.

 

Constraints:

  • 1 <= k <= num.length <= 105
  • num consists of only digits.
  • num does not have any leading zeros except for the zero itself.

Solutions

Solution 1: Greedy Algorithm

class Solution:
  def removeKdigits(self, num: str, k: int) -> str:
    stk = []
    remain = len(num) - k
    for c in num:
      while k and stk and stk[-1] > c:
        stk.pop()
        k -= 1
      stk.append(c)
    return ''.join(stk[:remain]).lstrip('0') or '0'
class Solution {
  public String removeKdigits(String num, int k) {
    StringBuilder stk = new StringBuilder();
    for (char c : num.toCharArray()) {
      while (k > 0 && stk.length() > 0 && stk.charAt(stk.length() - 1) > c) {
        stk.deleteCharAt(stk.length() - 1);
        --k;
      }
      stk.append(c);
    }
    for (; k > 0; --k) {
      stk.deleteCharAt(stk.length() - 1);
    }
    int i = 0;
    for (; i < stk.length() && stk.charAt(i) == '0'; ++i) {
    }
    String ans = stk.substring(i);
    return "".equals(ans) ? "0" : ans;
  }
}
class Solution {
public:
  string removeKdigits(string num, int k) {
    string stk;
    for (char& c : num) {
      while (k && stk.size() && stk.back() > c) {
        stk.pop_back();
        --k;
      }
      stk += c;
    }
    while (k--) {
      stk.pop_back();
    }
    int i = 0;
    for (; i < stk.size() && stk[i] == '0'; ++i) {
    }
    string ans = stk.substr(i);
    return ans == "" ? "0" : ans;
  }
};
func removeKdigits(num string, k int) string {
  stk, remain := make([]byte, 0), len(num)-k
  for i := 0; i < len(num); i++ {
    n := len(stk)
    for k > 0 && n > 0 && stk[n-1] > num[i] {
      stk = stk[:n-1]
      n, k = n-1, k-1
    }
    stk = append(stk, num[i])
  }

  for i := 0; i < len(stk) && i < remain; i++ {
    if stk[i] != '0' {
      return string(stk[i:remain])
    }
  }
  return "0"
}
function removeKdigits(num: string, k: number): string {
  let nums = [...num];
  while (k > 0) {
    let idx = 0;
    while (idx < nums.length - 1 && nums[idx + 1] >= nums[idx]) {
      idx++;
    }
    nums.splice(idx, 1);
    k--;
  }
  return nums.join('').replace(/^0*/g, '') || '0';
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文