前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 949. 给定数字能组成的最大时间(暴力)

LeetCode 949. 给定数字能组成的最大时间(暴力)

作者头像
Michael阿明
发布2020-07-13 11:52:22
7300
发布2020-07-13 11:52:22
举报

1. 题目

给定一个由 4 位数字组成的数组,返回可以设置的符合 24 小时制的最大时间。

最小的 24 小时制时间是 00:00,而最大的是 23:59。 从 00:00 (午夜)开始算起,过得越久,时间越大。

以长度为 5 的字符串返回答案。如果不能确定有效时间,则返回空字符串。

代码语言:javascript
复制
示例 1:
输入:[1,2,3,4]
输出:"23:41"

示例 2:
输入:[5,5,5,5]
输出:""
 
提示:
A.length == 4
0 <= A[i] <= 9

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/largest-time-for-given-digits 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 数据量很小,直接暴力查找
代码语言:javascript
复制
class Solution {
public:
    string largestTimeFromDigits(vector<int>& A) {
        int ans = -1, i, j, k, l, hours, mins;
        string h,m;
        for(i = 0; i < 4; i++)
            for(j = 0; j < 4; j++)
                if (j != i)
                    for(k = 0; k < 4; k++)
                        if (k != i && k != j)
                        {
                            l = 6 - i - j - k;// 四个下标的数值 0,1,2,3 和为 6
                            hours = 10*A[i] + A[j];
                            mins = 10*A[k] + A[l];
                            if(hours < 24 && mins < 60 && (hours*60+mins > ans))
                            {
                                ans = hours*60 + mins;
                                h = hours>=10 ? to_string(hours) : ("0"+to_string(hours));
                                m = mins>=10 ? to_string(mins) : ("0"+to_string(mins));
                            }
                        }
        if(ans >= 0) 
            return h+":"+m;
        return "";
    }
};

4 ms 8.3 MB

  • 降序获得最大的排列,看组成的时间是否合法,合法就返回
  • prev_permutation上一个更小的组合
代码语言:javascript
复制
class Solution {
public:
    string largestTimeFromDigits(vector<int>& A) {
        sort(A.begin(), A.end(), greater<int>());//降序排列
        vector<string> ans;
        string s;
        int i;
        do
        {	//合法的时间
            if( ((A[0]==2 && A[1]<4) || A[0]<2) && A[2]<6 ) 
            {	//小时  2X,     或者  0X, 1X     且   分钟 第一位 < 6
                s = "";
                for(i = 0; i < 4; i++)
                    s += (A[i]+'0');
                s.insert(2, ":");
                return s;
            }
        }
        while(prev_permutation(A.begin(), A.end()));//更小的排列
        return "";
    }
};

0 ms 8.2 MB

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档