这是悦乐书的第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+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!