87、给定数字能组成的最大时间

我的代码:十五分钟吧,简单的思路:将四个数字进行组合,每次完成一次组合后就判断,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);
        
        
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值