2016-11-13 168 views
-3

昨天我問了一個似乎是重複的問題,但是,我確定它不是重複的,因爲這個問題比一個更先進一點。標題沒有解釋全部,所以請繼續閱讀。二維數組的所有可能的排列組合

讓我們假裝我們有一個二維數組,像這樣:

{{true, false}, {true, false}, {true, false}, ...} 

現在,讓我們說,我們想遍歷它的所有可能的排列:

{{false, true}, {true, false}, {true, false}, ...} 
{{true, false}, {false, true}, {true, false}, ...} 
{{true, false}, {true, false}, {false, true}, ...} 
{{false, true}, {true, false}, {false, true}, ...} 

等等。 ..

由於這增加了一個級別,它嚴重混淆了我的想法。我們知道內部數組的長度總是兩個,這永遠不會改變。那就是:

boolean[][] b = new boolean[i][2]; 

什麼是accheive一個二維數組的所有可能的排列的最好方式,使用Java?

謝謝

+0

通過排列組合,你的意思是有多少種方法是二維陣列,或者選擇一個從第一列,一個在路數中選擇一組對布爾值的有第二? –

+0

以各種可能的方式選擇錯誤,真實的所有可能方式。例如,第一對和第二對都可能是假的,是真的。或者全部三首。或者第一,第二和第四,等等。 –

+0

好吧,從理論上講,真值和假值有四種排列組合形成一對。如果您正在嘗試查找數組中的每個排列有多少次,那麼您必須專門計算數組中發生的次數(true,true)。這不完全是一個排列。 –

回答

1

這顯然可以以同樣的方式任何其他的排列發生來完成,你需要循環列表要應用於排列,和過去的所有可能的組合遞歸的不同元素。

private void permute(List<List<Boolean>> list, int t) 
{ 
    for(int i = 0; i < list.size(); i ++) 
    { 
     Collections.swap(list.get(i), 0, 1); 
     permute(list, t + 1); 
     Collections.swap(list.get(i), 1, 0); 
    } 

    if(t == list.size() - 1) 
     System.out.println("Another permutation."); 
} 

而且覆蓋了整個事情,你已經繪製出了問題的所有可能組合突然如上所述。

現在讓我們假設我們有三個布爾而不是兩個以2D方式切換,突然之間的事情變得稍微複雜一些。

親切的問候,