【面试】lliveramp 面试题 面经 最大时刻问题

给出四个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;
	}

这种题目比较考察细节。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值