2012-09-18 40 views
-1

每個可能的組合給定的字符串數組使用一個字符串數組,以生成具有恆定

String[] values = {"A", "B", "C", "D", "E"}; 

和恆定

final String X = "X"; 

生成各種可能的方式的值數組可以包含0個或多個X

[A, B, C, D, E] 
    [A, X, X, D, E] 
    [A, B, X, D, E] 
    [X, X, X, X, X] 

等等各種可能性。需要快速 - 一個腦筋急轉彎,我很難提高效率。不像聽起來那麼容易。

+2

提示:所有可能的組合可以通過從00000 5位數的二進制串(所有原始值的)到11111(所有X)來表示。爲了得到00000到11111,只需在該位模式表示的二進制數中加1,直到達到(或超過)11111. –

+1

讓我們來看看你在編寫高效代碼時遇到的問題。 –

+0

感謝Joachim,這非常有幫助。我試圖用遞歸來解決它,但它並沒有解決。 – bsautner

回答

1

回答是勒夫紹爾的暗示:

 String[] values = {"A", "B", "C", "D", "E"}; 
    final String ONE = "1"; 
    final String X = "X"; 
    int control=0; 
    StringBuilder sb = new StringBuilder(values.length); 
    String copy[]; 
    int count = Integer.parseInt(new String(new char[values.length]).replace("\0", ONE), 2) ; 
    while (control <= count) { 
     sb.delete(0, sb.length()); 
     sb.append(String.format("%" + values.length + "s", Integer.toBinaryString(control++)).replace(' ', '0')); 
     copy = values.clone(); 
     for (int x = 0; x < sb.length(); x ++) { 
      if (sb.substring(x, x+1).equals(ONE)) { 
       copy[x] = X; 
      } 
     } 
     System.out.println(control + " " + Arrays.toString(copy)); 
     map.put(generateHashCode(copy),copy.clone()); 
    } 


    System.out.println(map.values().size()); 
相關問題