2017-05-28 11 views
-2

I持って、次のコードからPrint all unique integer partitions given an integer as input整数パーティション

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、この

ような配列で出力を得ることができますどのようにこの

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

のように入れています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]] 
関連する問題