<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<vector<int>> all ; 
    void solve (vector<int> &nums , vector<int> taken , vector<int> temp) {
        if (temp.size() == nums.size()) {
            all.push_back(temp) ;
            return ;
        }
        for(int i = 0 ; i < nums.size() ;i++){
            if (!taken[i]){
                taken[i] = 1 ;
                temp.push_back(nums[i]);
                solve (nums , taken , temp);
                temp.pop_back() ;
                taken[i] = 0 ;
            }
        }
    }
    string largestTimeFromDigits(vector<int>& nums) {
        vector<int> temp , taken(4,0) ;
        solve(nums , taken , temp) ;
        auto check = [&] (int idx){
            int hr = all[idx][0]*10 +  all[idx][1] ;
            int min = all[idx][2]*10 + all[idx][3] ;
            return (hr >= 0 && hr <= 23 && min >= 0 && min <= 59) ;
        };
        vector<int> ans (4 ,-1) ;
        for(int i = 0 ; i < all.size() ; i++){
            if (check(i)) {
                ans = max (ans , all[i]) ;
            }
        }
        if (ans.front() == -1) return "" ;
        string s = "" ;
        for(auto i : ans){
            s += '0'+i ;
            if (s.size() == 2) s+=':' ; 
        }
        return s;
    }
};
14500