import java.util.ArrayList; //将一个正整数划分成若干正整数(不超过max)的和,输出每一种划分方法 public class IntDivision { //递归对整数n进行划分,划分元素的最大值为max public static ArrayList<ArrayList<Integer>> divideInt_r(int n, int max){ ArrayList<ArrayList<Integer>> divisionList = new ArrayList<ArrayList<Integer>>(); if(n <= 1){ ArrayList<Integer> list = new ArrayList<Integer>(); if(n==1) list.add(1); divisionList.add(list); return divisionList; } for(int i=max; i>0; i--){ ArrayList<ArrayList<Integer>> newDivList = divideInt_r(n-i, Math.min(n-i, i));//sublist中的元素既不能超过i,也不能超过n-i for(ArrayList<Integer> sublist : newDivList){ sublist.add(0, i); divisionList.add(sublist); } } return divisionList; } public static void main(String[] args){ ArrayList<ArrayList<Integer>> divisionList = divideInt_r(6,4); System.out.println("Total divisions: "+divisionList.size()); for(ArrayList<Integer> list : divisionList){ for(Integer num : list){ System.out.print(num+" "); } System.out.println(); } } }
Total divisions: 9 4 2 4 1 1 3 3 3 2 1 3 1 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 1 1 1 1 1