<p>An integer has <strong>monotone increasing digits</strong> if and only if each pair of adjacent digits <code>x</code> and <code>y</code> satisfy <code>x &lt;= y</code>.</p>

<p>Given an integer <code>n</code>, return <em>the largest number that is less than or equal to </em><code>n</code><em> with <strong>monotone increasing digits</strong></em>.</p>

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

<pre>
<strong>Input:</strong> n = 10
<strong>Output:</strong> 9
</pre>

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

<pre>
<strong>Input:</strong> n = 1234
<strong>Output:</strong> 1234
</pre>

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

<pre>
<strong>Input:</strong> n = 332
<strong>Output:</strong> 299
</pre>

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

<ul>
	<li><code>0 &lt;= n &lt;= 10<sup>9</sup></code></li>
</ul>

class Solution {
public:
    void allPos(long c_num, long l_digit, long d_limit, long n, long &ans, long d_cnt) {
        if (c_num <= n) {
            ans = max(ans, c_num);
        }
        if (c_num > n || d_cnt > d_limit) return;

        for (long d = 0; d < 10; d++) {
            if (d >= l_digit) {
                allPos(c_num * 10 + d, d, d_limit, n, ans, d_cnt + 1);
            }
        }
    }
    int monotoneIncreasingDigits(int n) {
        long ans = 0;
        allPos(0, 0, 11, n, ans, 0);
        return ans;
    }
};
7600