LeetCode 949. 给定数字能组成的最大时间
题目描述
思路分析
解法一:全排列枚举(推荐)
核心思路:
- 4 个数字全排列一共 24 种,逐个枚举。
- 将前两位作为小时、后两位作为分钟,筛选合法时间。
- 记录最大的合法时间字符串即可。
复杂度分析:
- 时间复杂度:O(1),常数级枚举。
- 空间复杂度:O(1)。
class Solution {
public String largestTimeFromDigits(int[] arr) {
String best = "";
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (j == i) {
continue;
}
for (int k = 0; k < 4; k++) {
if (k == i || k == j) {
continue;
}
int l = 6 - i - j - k;
int hour = arr[i] * 10 + arr[j];
int minute = arr[k] * 10 + arr[l];
if (hour < 24 && minute < 60) {
String time = String.format("%02d:%02d", hour, minute);
if (time.compareTo(best) > 0) {
best = time;
}
}
}
}
}
return best;
}
}
import "fmt"
func largestTimeFromDigits(arr []int) string {
best := ""
for i := 0; i < 4; i++ {
for j := 0; j < 4; j++ {
if j == i {
continue
}
for k := 0; k < 4; k++ {
if k == i || k == j {
continue
}
l := 6 - i - j - k
hour := arr[i]*10 + arr[j]
minute := arr[k]*10 + arr[l]
if hour < 24 && minute < 60 {
time := fmt.Sprintf("%02d:%02d", hour, minute)
if time > best {
best = time
}
}
}
}
}
return best
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 31. 下一个排列 | 中等 | 排列 |
| 60. 第 k 个排列 | 困难 | 排列 |
| 556. 下一个更大元素 III | 中等 | 排列 |
| 670. 最大交换 | 中等 | 贪心 |
| 179. 最大数 | 中等 | 排序 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!