[Java] 计算组合数的代码

本文介绍了如何使用Java编写一个通用算法,用于列举从0到n-1的数字中选择m个数字的所有组合情况。通过建立一个m大小的栈,依次选择数字并形成组合,当遇到特定条件时调整栈中的数字,最终得到所有可能的组合。虽然在计算C(n,1)时会忽略只取第一个数字0的情况,但在实际应用中可以单独处理这一特殊情况。" 125074954,14288266,Oracle 12c 导出错误修复:KUPW$WORKER.FETCH_XML_OBJECTS [ORA-04063],"['Oracle数据库', '数据库导出', '数据库修复', 'SQL']
摘要由CSDN通过智能技术生成

列举出几个数字形成的组合情况,是一种很常见的问题。

用Java写了一个还算通用的列举出所有组合情况的代码。

问题:从0,1,2,...(n-1)数中,选择m个数,问总共有多少种情况,分别是什么样的?

方法:(1)模拟人工考虑组合情况,先建立一个m大小的堆栈,用来存放选取的数字。

(2)根据大小,依次选择m个数字,压入栈中。如果栈满了,就说明形成了一组组合情况。

(3)形成一个组合后,弹出最后一个数a,压入一个a+1,就形成了一个新的组合。以此类推。

(4)如果栈顶的数字为(n-1),那么其下一个组合需要改变形成组合的(m-1)个数字,应该是其加1。然后重复步骤(2)。

(5)当组合数形成(n-1-m),(n-m),.....,(n-1)的时候,就是最后一组m个数字的组合了,就可以停止寻找了。


【注意】这个代码在计算C(n,1)的时候,会缺少只取第一个数字0的情况,不过只有这个例外情况,可以在实际应用的时候添加写代码来解决。


代码如下:(代码中计算了C(16,8)的情况。

public class Ccnm{
	public in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值