2017-05-28 67 views
-2

我有以下代碼從Print all unique integer partitions given an integer as input整數分區在Java商店輸出陣列中的

void printPartitions(int target, int maxValue, String suffix) { 
if (target == 0) 
    System.out.println(suffix); 
else { 
    if (maxValue > 1) 
     printPartitions(target, maxValue-1, suffix); 
    if (maxValue <= target) 
     printPartitions(target-maxValue, maxValue, maxValue + " " + suffix); 
} 

}

當調用printPartitions(4,4, 「」);它給放出來這樣

1 1 1 1 
1 1 2 
2 2 
1 3 
4 

我怎樣才能獲得輸出像數組這樣

[1,1,1,1],[1,1,2],[2, 2],[1,3],[4]]

回答

0

在這種情況下,您應該將值收集到數組中。我把它換成一個列表陣列,爲「增加」的操作簡化(爲一個數組,你也應該維護索引):

void printPartitions(int target, int maxValue, List<String> suffix, List<List<String>> list) { 
    if (target == 0) { 
     list.add(suffix); 
    } else { 
     if (maxValue > 1) 
      printPartitions(target, maxValue-1, suffix, list); 
     if (maxValue <= target) { 
      List<String> tmp = new ArrayList<String>(); 
      tmp.add(0, String.valueOf(maxValue)); 
      tmp.addAll(suffix); 
      printPartitions(target-maxValue, maxValue, tmp, list); 
     } 
    } 
} 

void callPrintPartitions() { 
    List<List<String>> list = new ArrayList<List<String>>(); 
    printPartitions(4, 4, new ArrayList<String>(), list); 
    System.out.println(list); 
} 

輸出:

[[1, 1, 1, 1], [1, 1, 2], [2, 2], [1, 3], [4]]