将一个正整数划分成若干正整数的和,输出每一种划分方法

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 


猜你喜欢

转载自blog.csdn.net/cs064/article/details/12221143