<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:
vector<string>times;
   bool isPossible(string s){
      string hours=s.substr(0,2);
      string mins = s.substr(2,string::npos);
      int hrs=stoi(hours);
      int mns=stoi(mins);
      if(hrs>=0&&hrs<=23)
      {
        if(mns>=0&&mns<=59)
          return true;
      }
      return false;

   }
   void time(vector<int>& arr,string t,vector<int> visit){
    
        if(t.size()==4){
          if(isPossible(t))
           times.push_back(t);
          return;
        }
        for(int k=0;k<arr.size();k++)
        {
           if(!visit[k]){
            t+=to_string(arr[k]);
            visit[k]=1;
            time(arr,t,visit);
            visit[k]=0;
            t.pop_back();
           } 
                      
        }
        
          

   }
  
   int convertTime(string s){
    string hours=s.substr(0,2);
      string mins = s.substr(2,string::npos);
      int hrs=stoi(hours);
      int mns=stoi(mins);
      return (hrs*60*60)+(mns*60);
   }
    string largestTimeFromDigits(vector<int>& arr) {
       string t="";
       vector<int>visit(4,0);
       time(arr,t,visit);
       int sec=INT_MIN;
       string ans="";
       for(int i=0;i<times.size();i++)
         {
               
                int secs= convertTime(times[i]);
                if(sec<secs)
                {
                    sec=secs;
                    ans=times[i];
                }
            
         }
         if(ans=="")
          return ans;
       return ans.substr(0,2)+":"+ans.substr(2,string::npos);
    }
};
16400