<分区>
我最近在考试中遇到了一道题。 我将获得一个由 4 个数字组成的数组,我必须使用它来构造最大可能的 24 小时时间格式。 例如:如果输入数组是 [1,3,5,2],答案将是“23:51”。 如果输入数组为 [1,1,5,0],则答案为“15:10”。
我尝试这样做并且确实成功了,但它非常初级。我基本上必须为时间的每个位置制作 4 个不同的数组,并与输入数组进行比较。
用任何语言(c、c#、objC 或任何其他语言)实现的不同方法会有很大帮助。我似乎无法理解我的逻辑。
<分区>
我最近在考试中遇到了一道题。 我将获得一个由 4 个数字组成的数组,我必须使用它来构造最大可能的 24 小时时间格式。 例如:如果输入数组是 [1,3,5,2],答案将是“23:51”。 如果输入数组为 [1,1,5,0],则答案为“15:10”。
我尝试这样做并且确实成功了,但它非常初级。我基本上必须为时间的每个位置制作 4 个不同的数组,并与输入数组进行比较。
用任何语言(c、c#、objC 或任何其他语言)实现的不同方法会有很大帮助。我似乎无法理解我的逻辑。
最佳答案
只是想分享一个可行的解决方案。不一定有效。
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);
}
}
}
关于algorithm - 使用数字数组实现 "24 hour time",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40370551/