题目描述
警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如“HH:MM”表示的时刻。根据警察和线人的约定,为了隐蔽,该时间是修改过的,解密规则为:利用当前出现过的数字,构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。每个出现数字都可以被无限次使用。
输入描述
形如HH:SS字符串,表示原始输入
输出描述
形如HH:SS的字符串,表示推理处理的犯罪时间。
备注
1.可以保证现任给定的字符串一定是合法的。
例如,“01:35”和“11:08”是合法的,“1:35”和“11:8”是不合法的
2.最近的时刻可能在第二天。
用例
public class Main {
public static void main() {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String time = input.substring(0, 2) + input.substring(3);
char[] key = time.toCharArray();
if (key.length = 3) {
return; // 输入时间格式不合法
}
List<String> times = new ArrayList<>();
//枚举所有可能性
for(int i = 0; i < 4; i++) {
String tmp = "";
if (Integer.valueOf(char[i]) > 2) { //小时第一位必须是 0、1、2
continue;
}
temp += char[i];
for(int j = 0; j < 4; j++) {
if (Integer.valueOf(tmp) == 2 && Integer.valueOf(char[j]) > 3) {
continue; //第一位是2,第二位不能超过3
}
tmp += char[j];
for(int m = 0; m < 4; m++) {
if (Integer.valueOf(char[m]) > 5) {
continue; //分钟第一位必须小于等于5;
}
tmp += char[m];
for(int n = 0; n < 4; n++) {
tmp += char[n];
}
}
}
if (!list.contains(tmp)) {
list.add(tmp);
}
}
//对list进行自然排序
Collections.sort(list);
//获取时间的数组下标
int index = list.indexOf(time);
if (index < list.size() - 1) {
System.out.print(list.get(index + 1));
} else {
System.out.print(list.get(0));
}
}
}