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]
输出:""

提示:

  1. A.length == 4
  2. 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;
    }
};
posted @ 2019-04-08 15:12  zhanzq1  阅读(258)  评论(0编辑  收藏  举报