Gemini永久会员 LintCode 下一个最近的时间 Java实现优化
在LintCode上,针对“下一个最近的时间”问题,可以使用Java通过**枚举所有可能的时间组合**或**逐步递增时间并验证数字有效性**的方法来实现。以下是两种方法的详细说明和代码示例:
### 方法一:枚举所有可能的时间组合
1. **提取数字**:从给定的时间字符串中提取出所有可用的数字,并存储在一个集合中以便去重。
2. **生成所有可能的时间组合**:使用这些数字生成所有可能的小时和分钟组合。由于小时和分钟都是两位数,因此可以通过四重循环来生成所有可能的组合。
3. **验证时间有效性**:对于每一个生成的小时和分钟组合,验证其是否有效(小时小于24,分钟小于60)。
4. **计算时间差**:计算每一个有效时间与给定时间之间的分钟差,并找到最小的正差值。
5. **返回结果**:根据最小正差值找到对应的时间,并返回。
以下是该方法的Java代码示例:
```java
import java.util.HashSet;
import java.util.Set;
public class Solution {
public String nextClosestTime(String time) {
Set<Integer> digits = new HashSet<>();
digits.add(time.charAt(0) - '0');
digits.add(time.charAt(1) - '0');
digits.add(time.charAt(3) - '0');
digits.add(time.charAt(4) - '0');
int currentMinutes = Integer.parseInt(time.substring(0, 2)) * 60 + Integer.parseInt(time.substring(3, 5));
int minDiff = 24 * 60; // 一天中的最大分钟数
String result = time;
for (int h1 : digits) {
for (int h2 : digits) {
int hour = h1 * 10 + h2;
if (hour < 24) {
for (int m1 : digits) {
for (int m2 : digits) {
int minute = m1 * 10 + m2;
if (minute < 60) {
int totalMinutes = hour * 60 + minute;
int diff = totalMinutes - currentMinutes;
if (diff < 0) {
diff += 24 * 60; // 处理跨天的情况
}
if (diff > 0 && diff < minDiff) {
minDiff = diff;
result = String.format("%02d:%02d", hour, minute);
}
}
}
}
}
}
}
return result;
}
}
```
### 方法二:逐步递增时间并验证数字有效性
1. **解析当前时间**:将给定的时间字符串解析为小时和分钟。
2. **逐步递增时间**:从当前时间开始,逐步递增一分钟,直到找到一个新的时间,其所有数字都在给定时间的数字集合中。
3. **处理跨天情况**:如果递增到24小时后仍未找到有效时间,则说明需要跨天,此时应返回由给定时间数字组成的最小时间。
4. **返回结果**:找到有效时间后,返回其字符串表示。
以下是该方法的Java代码示例:
```java
import java.util.HashSet;
import java.util.Set;
public class Solution {
public String nextClosestTime(String time) {
Set<Character> digits = new HashSet<>();
digits.add(time.charAt(0));
digits.add(time.charAt(1));
digits.add(time.charAt(3));
digits.add(time.charAt(4));
int hour = Integer.parseInt(time.substring(0, 2));
int minute = Integer.parseInt(time.substring(3, 5));
while (true) {
minute++;
if (minute == 60) {
minute = 0;
hour++;
if (hour == 24) {
hour = 0;
}
}
String nextTime = String.format("%02d:%02d", hour, minute);
boolean valid = true;
for (char c : nextTime.toCharArray()) {
if (!digits.contains(c)) {
valid = false;
break;
}
}
if (valid) {
return nextTime;
}
}
}
}
```
更多推荐


所有评论(0)