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

本文介绍了一个使用递归算法实现的整数划分问题解决方案。该算法能够将一个正整数拆分成若干个不超过指定最大值的正整数之和,并输出所有可能的组合方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值