<p>Given a positive integer <code>n</code>, find <em>the smallest integer which has exactly the same digits existing in the integer</em> <code>n</code> <em>and is greater in value than</em> <code>n</code>. If no such positive integer exists, return <code>-1</code>.</p>

<p><strong>Note</strong> that the returned integer should fit in <strong>32-bit integer</strong>, if there is a valid answer but it does not fit in <strong>32-bit integer</strong>, return <code>-1</code>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<pre><strong>Input:</strong> n = 12
<strong>Output:</strong> 21
</pre><p><strong class="example">Example 2:</strong></p>
<pre><strong>Input:</strong> n = 21
<strong>Output:</strong> -1
</pre>
<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= n &lt;= 2<sup>31</sup> - 1</code></li>
</ul>

class Solution {
public:
    int nextGreaterElement(int n) {
        string num = to_string(n);
        int len = num.size();

        int i = len - 2;
        while (i >= 0 && num[i] >= num[i + 1]) {
            i--;
        }

        if (i < 0) {
            return -1;
        }

        int j = len - 1;
        while (num[j] <= num[i]) {
            j--;
        }

        swap(num[i], num[j]);
        reverse(num.begin() + i + 1, num.end());

        // Convert back to integer
        long long nextNum = stoll(num);

        // Step 5: Check if it fits in a 32-bit integer
        if (nextNum > INT_MAX) {
            return -1;
        }

        return (int)nextNum;
    }
};
7500