我的程序有問題。例如,我有5個字段。這些字段的值爲true
或false
。 False
字段可以刪除。所以我想找到這些領域的所有可能的組合。樹結構算法
我的想法是:比如我有這些領域
- 字段1的XML,真正
- 字段2,真正
- 字段3,假
- 字段4,假
- 字段5,假的
結果應該是:
{Field1, Field2, Field3, Field4, Field5}
{Field1, Field2, , Field4, Field5}
{Field1, Field2, , , Field5}
{Field1, Field2, , , }
{Field1, Field2, Field3, , Field5}
{Field1, Field2, Field3, , }
{Field1, Field2, Field3, Field4, }
{Field1, Field2, , Field4, }
8個組合。
而我的想法是,它可以用樹狀結構解決。我將檢查當前字段是「真」還是「假」。如果「真」,那麼我會向前移動一個字段。如果該字段爲「false」,我將複製XML並使用當前的「false」字段添加一次,並在列表中添加一次。 像這裏的圖片一樣。
public List<List<Fieldmatrix>> permut(List<Fieldmatrix> matrix, int j) {
while (felderLaenge != j) {
if (!matrix.get(j).isTrue()) {
tmpL = iterateLeft(matrix, j);
tmpR = iterateRight(matrix, j);
} else {
tmpL = iterateRight(matrix, j);
}
j++;
return permut(tmpL, j);
}
return sammlung;
}
iterateLeft
手段刪除,iterateRight
表示不刪除。
我不能實現duplicate-Function。所以我只有4個Xmls結果:
{1,2,3,4,5}, {1,2,4,5}, {1,2,3,5}, {1,2,3,4}
有人能幫助我嗎?
首先,我很感謝您的第一次支持。
的Fieldmatrix級的樣子:
public class Fieldmatrix {
private String feld;
private boolean pflicht;
public Fieldmatrix(String feld, boolean pflicht){
this.feld = feld;
this.pflicht = pflicht;
}
public String getFeld() {
return feld;
}
public void setFeld(String feld) {
this.feld = feld;
}
public boolean isPflicht() {
return pflicht;
}
public void setPflicht(boolean pflicht) {
this.pflicht = pflicht;
}
}
我怎樣才能改變這一部分「prefixWithField.add(?)」 你用字符串處理它,這工作,因爲這份名單是也是String類型。 但我使用列表 。
iterateRight()僅打印控制檯。 ieterateLeft()刪除當前字段並用控制檯打印。
你說的 「我無法實現重複功能」 是什麼意思? – RealSkeptic
你爲什麼不簡單計數?你開始的配置基本上是每個使用true初始化的字段的布爾值,然後在其上應用一個運算符,該運算符搜索可刪除的最右元素,翻轉它的值,並且每當它從false翻到true時,它都會繼續這樣做到左邊。正如一個人計算一個二進制數字,只有0和1反轉並忽略不可刪除的「數字」。這就是說,你的問題有點不清楚 - 你問的算法如何找到所有組合或如何複製XML? – Aziuth
另外,我真的建議用英語命名所有東西。 – Aziuth