<p>Given string num representing a non-negative integer <code>num</code>, and an integer <code>k</code>, return <em>the smallest possible integer after removing</em> <code>k</code> <em>digits from</em> <code>num</code>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

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

<p><strong class="example">Example 2:</strong></p>

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

<p><strong class="example">Example 3:</strong></p>

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

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= k &lt;= num.length &lt;= 10<sup>5</sup></code></li>
	<li><code>num</code> consists of only digits.</li>
	<li><code>num</code> does not have any leading zeros except for the zero itself.</li>
</ul>

class Solution {
public:
    // Method to reverse a string
    string reverse(const string& str) {
        int n = str.length();
        string reversed_str = str;

        // Reverse the string by swapping characters
        for (int i = 0; i < n / 2; i++) {
            swap(reversed_str[i], reversed_str[n - i - 1]);
        }

        return reversed_str;
    }

    // Method to remove k digits to form the smallest possible number
    string removeKdigits(string num, int k) {
        stack<char> st;

        // Traverse the number and build the stack
        for (int i = 0; i < num.length(); i++) {
            // Remove larger digits from the stack if they are greater than the current digit
            while (!st.empty() && k > 0 && st.top() > num[i]) {
                st.pop();
                k--;
            }
            st.push(num[i]);
        }

        // Remove remaining k digits if necessary
        while (k > 0 && !st.empty()) {
            st.pop();
            k--;
        }

        // Build the result string from the stack
        string res = "";
        while (!st.empty()) {
            res += st.top();
            st.pop();
        }

        // Reverse the result string
        res = reverse(res);

        // Remove leading zeros
        string result = "";
        bool leadingZero = true;
        for (char c : res) {
            if (leadingZero && c == '0') {
                continue; // Skip leading zeros
            }
            leadingZero = false;
            result += c;
        }

        // If result is empty (all zeros), return "0"
        return result.empty() ? "0" : result;
    }
};

10800