<p>Given an array <code>arr</code> of 4 digits, find the latest 24-hour time that can be made using each digit <strong>exactly once</strong>.</p>

<p>24-hour times are formatted as <code>&quot;HH:MM&quot;</code>, where <code>HH</code> is between <code>00</code> and <code>23</code>, and <code>MM</code> is between <code>00</code> and <code>59</code>. The earliest 24-hour time is <code>00:00</code>, and the latest is <code>23:59</code>.</p>

<p>Return <em>the latest 24-hour time in <code>&quot;HH:MM&quot;</code> format</em>. If no valid time can be made, return an empty string.</p>

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

<pre>
<strong>Input:</strong> arr = [1,2,3,4]
<strong>Output:</strong> &quot;23:41&quot;
<strong>Explanation:</strong> The valid 24-hour times are &quot;12:34&quot;, &quot;12:43&quot;, &quot;13:24&quot;, &quot;13:42&quot;, &quot;14:23&quot;, &quot;14:32&quot;, &quot;21:34&quot;, &quot;21:43&quot;, &quot;23:14&quot;, and &quot;23:41&quot;. Of these times, &quot;23:41&quot; is the latest.
</pre>

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

<pre>
<strong>Input:</strong> arr = [5,5,5,5]
<strong>Output:</strong> &quot;&quot;
<strong>Explanation:</strong> There are no valid 24-hour times as &quot;55:55&quot; is not valid.
</pre>

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

<ul>
	<li><code>arr.length == 4</code></li>
	<li><code>0 &lt;= arr[i] &lt;= 9</code></li>
</ul>

class Solution {
public:
    pair<int, int> largest = make_pair(-1, -1);

    bool isValidPair(pair<int, int> p)
    {
        return p.first >=0 && p.first < 24 && p.second >= 0 && p.second < 60;
    }

    void compareWithLargest(pair<int, int> cand)
    {
        if(isValidPair(cand))
            if(cand.first > largest.first || (cand.first == largest.first && cand.second > largest.second))
                largest = cand;
    }

    void recur(string cur, string digits)
    {
        if(cur.length() == 4)
            compareWithLargest(pair(stoi(cur.substr(0, 2)), stoi(cur.substr(2,2))));
        else
        {
            int l = digits.length();
            for(int i = 0; i<l; i++)
            {
                cur += digits[i];
                string temp = digits.substr(0, i) + digits.substr(i+1, l - i - 1);
                recur(cur, temp);
                cur.pop_back();
            }
        }
    }

    string largestTimeFromDigits(vector<int>& arr) {
        
        recur("", to_string(arr[0]) + to_string(arr[1]) + to_string(arr[2]) + to_string(arr[3]));

        if(largest.first == -1)
            return "";

        string firstString = largest.first < 10 ? "0" : "";
        firstString += to_string(largest.first);
        string secondString = largest.second < 10 ? "0" : "";
        secondString += to_string(largest.second);

        return firstString + ":" + secondString;
    }
};
14700