我最近在考試中被給了一個問題。 我將得到一個4位數字的數組,並使用它來構建最大可能的24小時時間格式。 例如:如果輸入數組是[1,3,5,2],答案將是「23:51」。 如果輸入數組爲[1,1,5,0],則答案爲「15:10」。使用一組數字實現「24小時制」
我試過並且確實成功了,但它非常基本。我基本上必須爲時間的每個位置創建4個不同的數組,並與輸入數組進行比較。
對於任何語言(c,c#,objC或其他任何語言)的實現,不同的方法會有很大的幫助。我似乎無法理解我的邏輯。
我最近在考試中被給了一個問題。 我將得到一個4位數字的數組,並使用它來構建最大可能的24小時時間格式。 例如:如果輸入數組是[1,3,5,2],答案將是「23:51」。 如果輸入數組爲[1,1,5,0],則答案爲「15:10」。使用一組數字實現「24小時制」
我試過並且確實成功了,但它非常基本。我基本上必須爲時間的每個位置創建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);
}
}
}
這不是完整的答案,只補一部分@arun。 爲了檢查有效的時間戳,我假設時間戳的形式是ab:cd其中a,b,c,d是數字。
一個應該是從0到2
如果小於2時,b爲所有有效。 否則,B應該是從0到3
C應該從0至5
d是所有有效
可以使用這些約束:
是24:00最大還是等於00:00(最小)? –
讓我們假設最大的將是23:59 – RajOlive