> For the complete documentation index, see [llms.txt](https://coding-9.gitbook.io/untitled/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coding-9.gitbook.io/untitled/stack/monotonic-stack/402.-remove-k-digits.md).

# 402. Remove K Digits

## Problem Statement

<br>

Given string num representing a non-negative integer `num`, and an integer `k`, return *the smallest possible integer after removing* `k` *digits from* `num`.

&#x20;

**Example 1:**

<pre><code><strong>Input: num = "1432219", k = 3
</strong><strong>Output: "1219"
</strong><strong>Explanation: Remove the three digits 4, 3, and 2 to form the new number 1219 which is the smallest.
</strong></code></pre>

**Example 2:**

<pre><code><strong>Input: num = "10200", k = 1
</strong><strong>Output: "200"
</strong><strong>Explanation: Remove the leading 1 and the number is 200. Note that the output must not contain leading zeroes.
</strong></code></pre>

**Example 3:**

<pre><code><strong>Input: num = "10", k = 2
</strong><strong>Output: "0"
</strong><strong>Explanation: Remove all the digits from the number and it is left with nothing which is 0.
</strong></code></pre>

&#x20;

**Constraints:**

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

## Intuition

```
Approach:
Use the concept of Monoton stack,
Remove the elements that does not follow increasing property

If still elements are not removed then remove from last
edge case
112
Follows monoton property throughout
Now remove k from last, as they are large


```

### Links

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

### Video Links

<https://www.youtube.com/watch?v=cFabMOnJaq0&ab_channel=NeetCode>

### Approach 1:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
class Solution {
public:
    string removeKdigits(string num, int k) {
        if(num.size() ==k)
            return "0";
        stack<char> st;
        for(int i=0; i<num.size(); i++){
            while(!st.empty() and st.top() > num[i] and k>0){
                st.pop();
                k--;
            }

            st.push(num[i]);
        }
        if(k) while(k--){st.pop();}
        stack<char> s2;
        while(!st.empty()){
            s2.push(st.top());
            st.pop();
        }
        while(s2.size()>1 and s2.top() == '0')
            s2.pop();

        string ans="";
        while(!s2.empty()){
            ans += s2.top();
            s2.pop();
        }

        return ans;
    }
};
```

{% endcode %}

### Approach 2:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Approach 3:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Approach 4:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Similar Problems

###
