2016-11-02 38 views
3

我最近在考試中被給了一個問題。 我將得到一個4位數字的數組,並使用它來構建最大可能的24小時時間格式。 例如:如果輸入數組是[1,3,5,2],答案將是「23:51」。 如果輸入數組爲[1,1,5,0],則答案爲「15:10」。使用一組數字實現「24小時制」

我試過並且確實成功了,但它非常基本。我基本上必須爲時間的每個位置創建4個不同的數組,並與輸入數組進行比較。

對於任何語言(c,c#,objC或其他任何語言)的實現,不同的方法會有很大的幫助。我似乎無法理解我的邏輯。

+0

是24:00最大還是等於00:00(最小)? –

+0

讓我們假設最大的將是23:59 – RajOlive

回答

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. 將這個數字在前面如果是合法的(0,1,或在第一斑點2)。如果沒有,找到最大的法定數字並將其放在第一位。
  3. 重複1-2與第二,第三等數量最多,直至法律號發現前面
  4. 重複1-3秒鐘前,倒數第二個,也是最後
  5. 如果你結束了非法號碼,然後將這些非法號碼與產生最近時間的較早號碼交換。
1

由於只有4個數字,我會生成所有可能的時間標記(這將是4!24),對它們進行排序,並找到有效的最大時間戳。

如何檢查t是否有效24小時時間戳?

  • t是最多4位數字,即t mod 10000 == 0
  • 最後兩位數字(t mod 100)是一個有效的分鐘值,即在[0-59]
  • 前兩個數字(t div 100)的範圍內是有效的小時值,即在範圍[0-23]
+0

我不得不使用一些系統API來檢查它是否是有效的時間戳嗎? – RajOlive

+0

@RajOlive這是非常簡單的,你不需要使用API – Statham

0

這不是完整的答案,只補一部分@arun。 爲了檢查有效的時間戳,我假設時間戳的形式是ab:cd其中a,b,c,d是數字。

  • 一個應該是從0到2

  • 如果小於2時,b爲所有有效。 否則,B應該是從0到3

  • C應該從0至5

  • d是所有有效

可以使用這些約束:

  • 生成後檢查有效時間戳 或
  • 使用它們生成