# 402. Remove K Digits

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.

Approach 1:

Bruteforce method :

By checking all the numbers formed for each combination of k characters. We can see which is the least number o among them.

This would take ,

Time: O(n²) ->TLE

Space: O(1)

Approach 2:

Using monotonic stack , where we keep monotonically increasing order.

`class Solution:`

def removeKdigits(self, num: str, k: int) -> str:

stk=[]

for i in num:

while(k and stk and stk[-1]>i):

stk.pop()

k-=1

stk.append(i)

while(k):

stk.pop()

k-=1

result = "".join(stk).lstrip("0")

return(result if result else "0")

Time: O(n)

Space: O(n)

`1 <= k <= num.length <= 105`

`num`

consists of only digits.`num`

does not have any leading zeros except for the zero itself.