題目
給定一個數組,里面有6個整數,求這個數組能夠表示的最大24進制的時間是多少, 輸出這個時間,無法表示輸出invalid
輸入:輸入為一個整數數組,數組內有6個整數
輸入整數數組長度為6,不需要考慮其它長度,元素值為0或者正整數,
6個數字每個數字只能使用一次。
輸出:輸出為一個24進賬格式的時間,或者字符串“invalid”
示例輸入:[0,2,3,0,5,6]
示例輸出: 23:56:00
代碼
public class GetMaxDateByArray {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 循環連續讀取
while (sc.hasNext()) {
String line = sc.nextLine();
System.out.println(getResult(line));
}
}
/**
* 解題思路: 時間格式第一位不能大於2,第二位不能大於3等
* 所以從頭開始,一位一位找,先找滿足第一位的集合中的數字,然后找出最大的一個,
* 碰到任何不滿足條件的直接返回 invalid,滿足則從數組從移除,以此類推
* 這里注意一點,list.remove 有兩個重載方法,如果是int集合,按照元素刪除,必須是包裝類,即 Integer.valueOf, 否則會按照索引刪除,會有問題
*/
private static String getResult(String line) {
final String s = "invalid";
final String c = ":";
String[] strArray = line.split(",");
// 轉換為數組,放入集合
List<Integer> list = Arrays.stream(strArray).map(Integer::parseInt).collect(Collectors.toList());
StringBuilder result = new StringBuilder();
//第一位不能大於3,獲取數組中小於3的數字中最大的一個
int data1 = getDataOfLocation(list, 3);
if (data1 != -1) {
list.remove(Integer.valueOf(data1));
result.append(data1);
} else {
return s;
}
//如果第一位是2,那么第二位則不能超過4
if (result.charAt(0) == '2') {
//第二位
int data2 = getDataOfLocation(list, 4);
if (data2 != -1) {
// 按照元素刪除
list.remove(Integer.valueOf(data2));
result.append(data2);
result.append(c);
} else {
return s;
}
// 否則,第一位可能是0或者1,這樣第二位可以是0-9,即小於10
} else {
//第二位
int data3 = getDataOfLocation(list, 10);
if (data3 != -1) {
list.remove(data3);
result.append(data3);
result.append(c);
} else {
return s;
}
}
//第三位,分鍾最大是59,即小於6
int data4 = getDataOfLocation(list, 6);
if (data4 != -1) {
list.remove(Integer.valueOf(data4));
result.append(data4);
} else {
return s;
}
//第四位,0-9
int data5 = getDataOfLocation(list, 10);
if (data5 != -1) {
list.remove(Integer.valueOf(data5));
result.append(data5);
result.append(c);
} else {
return s;
}
//第五位
int data6 = getDataOfLocation(list, 6);
if (data6 != -1) {
list.remove(Integer.valueOf(data6));
result.append(data6);
} else {
return s;
}
//最后一位
if (getDataOfLocation(list, 10) != -1) {
result.append(getDataOfLocation(list, 10));
} else {
return s;
}
return result.toString();
}
/**
* 獲取數組中比 standard 小的數字中最大的一個數,沒有返回-1
*/
static int getDataOfLocation(List<Integer> list, int standard) {
return list.stream().filter(x -> x < standard).mapToInt(x -> x).max().orElse(-1);
}
}