Given an array of 4 digits,return the largest 24 hour time that can be made.*
The smallest 24 hour time is 00:00, and the largest is 23:59.
Starting from 00:00, a time is larger if more time has elapsed since midnight.
Return the answer as a string of length 5.
If no valid time can be made,return an empty string.
Example 1:
Input:[1,2,3,4]
Output:"23:41"
Example 2:
Input:[5,5,5,5]
Output:""
Note:
A.length ==40<= A[i]<=9
二、题解
(1) 暴力枚举(String.format)
/**
* @thought:暴力枚举:
* @date: 1/18/2020 3:12 PM
* @Execution info:
* ·执行用时 9 ms 击败了 45.8 % 的java用户
* ·内存消耗 35MB 击败了 36.48% 的java用户
* @Asymptotic Time Complexity:O()
*/public String largestTimeFromDigits(int[] A){int N = A.length;// A.length已知为4int ans =-1;int sumIndex=0;// 下标总和for(int i =0; i < N; i++){for(int j =0; j < N; j++){if(i != j)for(int k =0; k < N; k++){if(k != i && k != j){int l =6-i-j-k;// i、j、k的索引值互不相同且确定后,因为下标的总和为0+1+2+3,所以l确定。int h = A[i]*10+ A[j];int m = A[k]*10+ A[l];if(h <24&& m <60){int sumM = h*60+ m;// 统一化成分钟,比较才有意义,否则像A=[1,2,3,4],则会输出"21:43",而不是"23:41"if(sumM > ans)
ans = sumM;}}}}}// "%02d":参数的值占2位,不够两位拿0填满return ans >=0? String.format("%02d:%02d", ans/60, ans%60):"";}
复杂度分析
时间复杂度: O(4),
空间复杂度:O(1),
(2) 局部优化
/**
* @thought:局部优化暴力枚举:
* @date: 1/18/2020 3:20 PM
* @Execution info:
* ·执行用时 1 ms 击败了 100% 的java用户
* ·内存消耗 34.4MB 击败了 97% 的java用户
* @Asymptotic Time Complexity:O()
*/public String largestTimeFromDigits2(int[] A){
String ansStr ="";int N = A.length;int ans =-1;for(int i =0; i < N; i++){for(int j =0; j < N; j++){if(i != j){for(int k =0; k < N; k++){if(k != i && k != j){int l =6-i-j-k;int h = A[i]*10+ A[j];int m = A[k]*10+ A[l];if(h <24&& m <60){int sumM = h*60+ m;// 统一化成分钟比较才有意义if(sumM > ans){
ans = sumM;
ansStr = A[i]+""+ A[j]+":"+ A[k]+ A[l];}}}}}}}return ansStr;}