Skip to content

Latest commit

 

History

History
109 lines (84 loc) · 2.7 KB

File metadata and controls

109 lines (84 loc) · 2.7 KB

中文文档

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

Approach 1: Greedy Algorithm

Python3

class Solution:
    def removeKdigits(self, num: str, k: int) -> str:
        stack, remain = [], len(num)-k
        for value in num:
            while k and stack and stack[-1] > value:
                k = k-1
                stack.pop()
            stack.append(value)
        return "".join(stack[:remain]).lstrip('0') or '0'

Go

func removeKdigits(num string, k int) string {
	stack, remain := make([]byte, 0), len(num)-k
	for i := 0; i < len(num); i++ {
		n := len(stack)
		for k > 0 && n > 0 && stack[n-1] > num[i] {
			stack = stack[:n-1]
			n, k = n-1, k-1
		}
		stack = append(stack, num[i])
	}

	for i := 0; i < len(stack) && i < remain; i++ {
		if stack[i] != '0' {
			return string(stack[i:remain])
		}
	}
	return "0"
}

TypeScript

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';
}

...