我的代码:十五分钟吧,简单的思路:将四个数字进行组合,每次完成一次组合后就判断,j1j2j3j4,分别表示的是时钟的十位,个位,分钟的十位,个位,时钟的话如何十位位2的话那么个位只能小于4,如果是1或者0那么小于等于9即可,分钟的话没有什么要求只要小于等于9即可,那么如何判断是最大呢?这里我转成了分钟,这样能确保统一了,分钟用shuzhi来保存,这个变量总是保存最大的值,初始为-1是为了保证输入0000时输出为"00:00",不容易看似很多其实思路比较清晰,十几分钟就刚出来了;
class Solution {
public String largestTimeFromDigits(int[] A) {
String resut = "";
int shuzhi = -1;
for (int i1 = 0; i1 < 4; i1++) {
int j1 = A[i1];
for (int i2 = 0; i2 < 4; i2++) {
if(i1 != i2){
int j2 = A[i2];
for (int i3 = 0; i3 < 4; i3++) {
if(i1 != i2 && i2 != i3 && i3 != i1){
int j3 = A[i3];
for (int i4 = 0; i4 < 4; i4++) {
if(i4 != i1 && i4 != i2 && i4 != i3){
int j4 = A[i4];
if(j1 > 2){
continue;
}
if(j1 == 2){
if(j2 > 3){
}else {
int tem = (j1*10+j2)*60;
if(j3 > 5){
}else {
if(j4 > 9){
}else {
tem = tem + j3*10+j4;
if(tem > shuzhi){
shuzhi = tem;
resut = j1+""+j2+":"+j3+""+j4;
}
}
}
}
}
if(j1 <= 1 && j1>=0){
int tem = (j1*10+j2)*60;
if(j2>9){
}else {
if(j3 > 5){
}else {
if(j4>9){
}else {
tem = tem + j3*10+j4;
if(tem > shuzhi){
shuzhi = tem;
resut = j1+""+j2+":"+j3+""+j4;
}
}
}
}
}
}
}
}
}
}
}
}
return resut;
}
}
排名比较靠前
没想到排名靠前的这个基本也是这个思路
class Solution {
public static String largestTimeFromDigits(int[] A) {
int tmp = 0;
char[] ans = {'a','a',':','a','a'};
int maxTime = -1;
Boolean flag = false;
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;
for(int l = 0;l < 4;l++){
if(l == i||l == j||l == k)
continue;
if(A[i]*10 + A[j] >= 24||A[k]*10 + A[l] >= 60)
break;
if(A[i]*600 + A[j]*60 + A[k]*10 + A[l] > maxTime){
maxTime = A[i]*600 + A[j]*60 + A[k]*10 + A[l];
ans[0] = (char)((int)'0'+A[i]);
ans[1] = (char)((int)'0'+A[j]);
ans[3] = (char)((int)'0'+A[k]);
ans[4] = (char)((int)'0'+A[l]);
}
}
}
}
}
if(ans[0] == 'a'){
return "";
}
return new String(ans);
}
}