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

题目描述

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. 最大数 中等 排序
本文作者:
本文链接: https://hgnulb.github.io/blog/2025/13355570
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!