leetcode 949. 给定数字能组成的最大时间(Largest Time for Given Digits)
题目描述:
给定一个由 4 位数字组成的数组,返回可以设置的符合 24 小时制的最大时间。
最小的 24 小时制时间是 00:00,而最大的是 23:59。从 00:00 (午夜)开始算起,过得越久,时间越大。
以长度为 5 的字符串返回答案。如果不能确定有效时间,则返回空字符串。
示例 1:
输入:[1,2,3,4]
输出:"23:41"
示例 2:
输入:[5,5,5,5]
输出:""
提示:
A.length == 4
0 <= A[i] <= 9
解法:
class Solution {
public:
vector<string> getAllTime(const string& left){
vector<string> res;
int sz = left.size();
if(sz == 0){
return res;
}else if(sz == 1){
return {left};
}else{
for(int i = 0; i < sz; i++){
string s = left.substr(0, i) + left.substr(i+1);
vector<string> lst = getAllTime(s);
// cout<<s<<endl;
// for(string tm : lst){
// cout<<"*** "<<tm<<endl;
// }
// cout<<endl;
for(string tm : lst){
if(tm.size() == 2){
tm = ':' + tm;
res.push_back(left[i] + tm);
}else{
res.push_back(left[i] + tm);
}
}
}
return res;
}
}
bool isValid(string& tm){
if(tm.size() != 5){
return false;
}else{
string hour = tm.substr(0, 2);
string minute = tm.substr(3);
if(hour > "23" || minute > "59"){
return false;
}else{
return true;
}
}
}
string largestTimeFromDigits(vector<int>& A) {
string s = "";
for(int d : A){
s += char('0' + d);
}
vector<string> tms = getAllTime(s);
string res = "";
for(string tm : tms){
cout<<tm<<endl;
if(isValid(tm) && res < tm){
res = tm;
}
}
return res;
}
};