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

import java.util.ArrayList;

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


你可能感兴趣的:(面试题目)