<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:
    int mx=0;
    int g(vector<int>& v){
        if(v[0]*10+v[1]<=23 && v[2]*10+v[3]<=59) return (v[0]*10+v[1])*60+(v[2]*10+v[3]);
        return 0;
    }
    void f(vector<int>& v,int i){
        if(i==v.size()){
            cout<<v[0]<<" "<<v[1]<<" "<<v[2]<<" "<<v[3]<<endl;
            int k=g(v);
            if(k) mx=max(mx,k);
            return;
        }
        unordered_set<int> s;
        for(int j=i ; j<v.size() ; j++){
            if(s.find(v[j])==s.end()){
                s.insert(v[j]);
                swap(v[i],v[j]);
                f(v,i+1);
                swap(v[i],v[j]);
            }
        }
    }
    string largestTimeFromDigits(vector<int>& arr) {
        f(arr,0);
        int m=mx%60;
        mx/=60;
        string s="";
        s+=to_string(mx);
        s+=':';
        s+=to_string(m);
        bool flag=false;
        for(int i=0 ; i<arr.size() ; i++){
            if(arr[i]!=0){
                flag=true;
                break;
            } 
        }
        if(s=="0:0"){
            if(flag) return "";
            return "00:00";
        }
        if(s.length()!=5){
            if(s[1]==':') s='0'+s;
            if(s.length()==4) s.insert(s.begin()+3,'0');
        }
        return s;
    }
};
14300