我最近在考试中得到了一个问题。 我将获得一个包含4个数字的数组,并使用它我必须构建最大可能的24小时时间格式。 例如:如果输入数组为[1,3,5,2],则答案为“23:51”。 如果输入数组为[1,1,5,0],则答案为“15:10”。
我尝试过并且确实取得了成功,但这是非常简陋的。我基本上必须为每个时间位置制作4个不同的数组,并与输入数组进行比较。
使用任何语言(c,c#,objC或任何其他等)实现的不同方法将会有很大帮助。我似乎无法理解我的逻辑。
答案 0 :(得分:2)
只想分享一个有效的解决方案。不一定有效率。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) throws Exception {
int[] input = {1,2,6,7};
System.out.println(getLargestTime(input)+" is the largest time!");
}
public static String getLargestTime(int[] input) {
String largestTime = "00:00";
String str = input[0]+""+input[1]+""+input[2]+""+input[3];
List<String> times = new ArrayList<>();
permutation(str, times);
Collections.sort(times, Collections.reverseOrder());
for (String t: times) {
int hours = Integer.parseInt(t) / 100;
int minutes = Integer.parseInt(t) % 100;
if (hours < 24 && minutes < 60) {
if (hours < 10 && minutes < 10) {
largestTime = "0"+hours+":0"+minutes;
} else if (hours < 10) {
largestTime = "0"+hours+":"+minutes;
} else if (minutes < 10) {
largestTime = hours+":0"+minutes;
} else {
largestTime = hours+":"+minutes;
}
}
}
return largestTime;
}
public static void permutation(String str, List<String> list) {
permutation("", str, list);
}
private static void permutation(String prefix, String str, List<String> list) {
int n = str.length();
if (n == 0) list.add(prefix);
else {
for (int i = 0; i < n; i++)
permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n), list);
}
}
}
答案 1 :(得分:1)
答案 2 :(得分:1)
由于只有4个数字,我会生成所有可能的时间戳(即4!
,即24
),对它们进行排序,并找到最大的有效时间戳。
如何检查t
24小时时间戳是否有效?
t
最多4位,即t mod 10000 == 0
t mod 100
)是有效的分钟值,即在[0-59]
t div 100
)是有效的小时值,即在[0-23]
答案 3 :(得分:0)
这不是完整的答案,只是@arun的补充部分。 为了检查有效时间戳,我假设时间戳的形式是ab:cd,其中a,b,c,d是数字。
a应为0到2
如果小于2,则b全部有效。 否则,b应为0到3
c应该是0到5
d全部有效
您可以使用这些约束: