<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:
    bool valid(string hh, string mm) {
        int h = stoi(hh);
        int m = stoi(mm);
        return h>=0 && h<=23 && m>=0 && m<=59;
    }
    vector<vector<int> > p;
    void perm(vector<int> &arr, int i, int j) {
        if (i>3 || j>3) {
            return ;
        }
        for(j=0;j<3;j++) {
            swap(arr[i], arr[j]);
            p.push_back(arr);
            perm(arr, i+1, j);
            swap(arr[j], arr[i]);
        }
    }
    
    string largestTimeFromDigits(vector<int>& arr) {
        sort(arr.begin(), arr.end());
        perm(arr, 0, 0);
        int maxHH=-1, maxMM=-1;
        string finalHH = "",finalMM = "";
        for(int i=0;i<p.size();i++) {
            string hh = to_string(p[i][0]) + to_string(p[i][1]);
            string mm = to_string(p[i][2]) + to_string(p[i][3]);
            // cout << hh + ":" + mm << "\n";
            if (valid(hh, mm)) {
                if (stoi(hh)>maxHH) {
                    finalHH=hh;
                    finalMM=mm;
                    maxHH = stoi(hh);
                    maxMM = stoi(mm);
                } else if (stoi(hh)==maxHH && stoi(mm) > maxMM) {
                    finalHH=hh;
                    finalMM=mm;
                    maxMM = stoi(mm);
                }
            }
        }
        if (finalHH != "" || finalMM != "") {
            return finalHH + ":" + finalMM;
        } else {
            return "";
        }
    }
};
17200