给出四个int数字,让返回可以组成的合法的最大的24小时时刻。格式为“HH:MM”。
比如1,2,3,4,返回23:41,如果无法组成,返回“not possbile”。
答完题以后发现自己漏了一种情况。。。忧伤。。。
思路是把数字放入数组,然后排个序,方便处理。
(1)先检测o位,如果大于2,返回不可能;
(2)处理前两位。最小的数字一定是0或者1或者2。分别考虑这三种情况,从高到低。
如果有2,那么再查看是否有3或者2或者1或者0,按照这个顺序查看,如果有,就可以赋值小时位了。否则,无法构成,返回不可能。
如果有1,那么只要取最后一位即可;
最后一种情况就是0了,也取最后一位;
(3)处理后两位,此时只有两个数字可用,如果最低位大于5,返回不可能;
(4)如果最高位小于6,则先最高位,否则先低位。
public String solution(int A, int B, int C, int D) {
List<Integer> bits = new ArrayList<>();
bits.add(A);
bits.add(B);
bits.add(C);
bits.add(D);
String res = "";
Collections.sort(bits);
if (bits.get(0) > 3)
return "NOT POSSIBLE";
if (bits.contains(2)) {
int index = bits.indexOf(2);
bits.remove(index);
for(int i = 3; i >= 0; i--){
if(bits.contains(i)){
int index1 = bits.indexOf(i);
bits.remove(index1);
res += "2" + "" + i;
break;
}
}
return "NOT POSSIBLE";
} else if (bits.contains(1)) {
int index1 = bits.indexOf(1);
bits.remove(index1);
res += "1" + "" + bits.get(2);
bits.remove(2);
} else {
res += bits.get(0) + "" + bits.get(3);
bits.remove(0);
bits.remove(2);
}
res += ":";
if (bits.get(0) >= 6)
return "NOT POSSIBLE";
if (bits.get(1) <= 5) {
res += bits.get(1) + "" + bits.get(0);
} else {
res += bits.get(0) + "" + bits.get(1);
}
return res;
}
这种题目比较考察细节。