比如输对于整数5,分解的结果为:
5 = 4 + 1
5 = 3 + 2
5 = 3 + 1 + 1
5 = 2 + 2 + 1
5 = 2 + 1 + 1 + 1
5 = 1 + 1 + 1 + 1 + 1
private static void splitInteger(int n) {
if(n<2 || n>10) {
System.out.println("错误,参数的范围应该是[2, 10]!");
} else {
int[] list = new int[n+1];
list[0] = n;
resolve(n, 1, list);
}
}
private static void resolve(int n, int level, int[] list) {
for(int i=(level==1 ? n-1 : n); i>0; i--) {
list[level] = i;
if(i<=list[level-1]){ //如果把“if(i<=list[level-2])”去掉,就会出现重复的组合
if(i==n) {
printList(list, level+1);
}else {
resolve(n-i, level+1, list);
}
}
}
}
private static void printList(int[] list, int length) {
System.out.print(String.format("%1$d = %2$d", list[0], list[1]));
for(int i=2; i<length; i++) {
System.out.print(String.format(" + %1$d", list[i]));
}
System.out.println();
}