这是悦乐书的第363次更新,第391篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第225题(顺位题号是949)。给定4个整数组成的数组,返回最大的24小时时间。

最小的24小时时间是00:00,最大的是23:59。 从00:00开始,如果从午夜开始经过更多时间,则时间会更长。

将答案作为长度为5的字符串返回。如果无法生成有效时间,则返回空字符串。例如:

输入:[1,2,3,4]

输出:“23:41”

输入:[5,5,5,5]

输出:“”

注意

  • A.length == 4

  • 0 <= A [i] <= 9

02 第一种解法

根据排列组合,使用三层循环,将每一种情况都算出来,组成一个24小时时间的字符串,然后判断是否符合24小时时间制,并且判断是否比已经算出的最大时间还大,最后返回最大的时间即可。

使用三层循环的时候,可以得到三个数,剩下的那个数在数组A中索引为6-i-j-k,因为四个数的索引只能是0,1,2,3四个,已经知道其中三个,剩下那个用和做减法即可得到。另外,比较时间字符串的大小用的是compareTo方法。

public String largestTimeFromDigits(int[] A) {
String result = "";
for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
for (int k=0; k<4; k++) {
if (i == j || j == k || i == k) {
continue;
}
String hour = A[i] + "" + A[j];
String minute = A[k] + "" +A[6-i-j-k];
String time = hour + ":" + minute;
if (hour.compareTo("24") < 0 && minute.compareTo("60") < 0
&& time.compareTo(result) > 0) {
result = time;
}
}
}
}
return result;
}

03 第二种解法

思路和上面一样,依旧是将所有可能的情况列出来,然后将有效的时间换成分钟数来表示,找出最大值,最后再转成字符串输出即可。

public String largestTimeFromDigits2(int[] A) {
int ans = -1;
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j) {
for (int k = 0; k < 4; ++k) {
if (i == j || j == k || i == k) {
continue;
}
int hours = 10 * A[i] + A[j];
int mins = 10 * A[k] + A[6 - i - j - k];
if (hours < 24 && mins < 60) {
ans = Math.max(ans, hours * 60 + mins);
}
}
}
}
return ans == -1 ? "" : String.format("%02d:%02d", ans/60, ans%60);
}

04 小结

算法专题目前已连续日更超过七个月,算法题文章231+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode.949-给定数字的最大时间(Largest Time for Given Digits)的更多相关文章

  1. Leetcode 949. 给定数字能组成的最大时间

    949. 给定数字能组成的最大时间  显示英文描述 我的提交返回竞赛   用户通过次数125 用户尝试次数213 通过次数127 提交次数774 题目难度Easy 给定一个由 4 位数字组成的数组,返 ...

  2. [Swift]LeetCode949. 给定数字能组成的最大时间 | Largest Time for Given Digits

    Given an array of 4 digits, return the largest 24 hour time that can be made. The smallest 24 hour t ...

  3. LeetCode 34 Search for a Range (有序数组中查找给定数字的起止下标)

    题目链接: https://leetcode.com/problems/search-for-a-range/?tab=Description   Problem: 在已知递减排序的数组中,查找到给定 ...

  4. Confusing Date Format UVALive 7711 给定mm-mm-mm格式的时间。年份(1900-1999)只给了后两位数,问有多少种合法的排列使时间正确。

    /** 题目:Confusing Date Format UVALive 7711 链接:https://vjudge.net/contest/174844#problem/A 题意:给定mm-mm- ...

  5. Python3-Cookbook总结 - 第三章:数字日期和时间

    第三章:数字日期和时间 在Python中执行整数和浮点数的数学运算时很简单的. 尽管如此,如果你需要执行分数.数组或者是日期和时间的运算的话,就得做更多的工作了. 本章集中讨论的就是这些主题. Con ...

  6. PythonCookBook笔记——数字日期和时间

    数字日期和时间 数字的四舍五入 用round函数,指定值和小数位数. >>> round(1.23, 1) 1.2 >>> round(1.27, 1) 1.3 & ...

  7. 【Leetcode_easy】949. Largest Time for Given Digits

    problem 949. Largest Time for Given Digits solution: class Solution { public: string largestTimeFrom ...

  8. leetcode 12题 数字转罗马数字

    leetcode 12题 数字转罗马数字 答案一:我的代码 代码本地运行完全正确,在线运行出错 class Solution { public: string intToRoman(int num) ...

  9. MySQL的数据类型:文本、数字、日期/时间

    在MySQL中,有三种主要的类型:文本.数字和日期/时间类型. 文本类型(text):数据类型                                 描述 CHAR(size) 保存固定长度 ...

随机推荐

  1. flutter 学习路上碰到的错误问题。

    决定还是把碰到的问题进行简单记录吧 19.8.14 错误日志: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subty ...

  2. 提取包含QQ的文本为QQ邮箱

    # -*- coding: utf-8 -*- """ Created on Sun Dec 15 14:08:03 2019 @author: Dell 提取包含QQ号 ...

  3. jar is not a valid DFS filename

  4. Python的语句---钱中平

    python中的两种语句:1.if条件控制语句 格式: if: a = int(input("请输入第一个数:"))b = int(input("请输入第二个数:&quo ...

  5. printf计算参数是从右到左压栈的(a++和++a的压栈的区别)

    一.问题 c++代码: #include <iostream> #include <stdio.h> using namespace std; int main(){ ; co ...

  6. k8s删除节点后再重新添加进去(踩坑)

    开启本地集群,发现一台节点出问题了,想删除再换一台节点,结果就踩坑了,还好本地有好几套环境. 再master节点执行以下命令 [root@k8s-master ~]# kubectl drain k8 ...

  7. THUSC 2017 游记

    Day0 早上在家里整理东西. 下午坐飞机去北京.(怎么又去北京,上周刚去的北京) 一开始飞机爬升的时候太无聊就睡着了.醒了以后就开始吃东西.吐槽一句:厦航的飞机就是好啊.上面的点心也比上次海航的好吃 ...

  8. sh_12_字典的遍历

    sh_12_字典的遍历 xiaoming_dict = {"name": "小明", ", "} # 迭代遍历字典 # 变量k是每一次循环中 ...

  9. make文件基础用法

    参照:https://www.jianshu.com/p/0b2a7cb9a469 创建工作目录,包含一下文件 main.c person.c b.h c.h /*** c.h ***/ //this ...

  10. [CSP-S模拟测试]:字符交换(贪心+模拟)

    题目传送门(内部题136) 输入格式 输入文件第一行为两个正整数$n,k$,第二行为一个长度为$n$的小写字母字符串$s$. 输出格式 输出一个整数,为对字符串$s$进行至多$k$次交换相邻字符的操作 ...