n个A,m个B,k个C的所有组合--Java实现

本文介绍了一种计算特定字符组合数量的方法,并通过实例演示了如何利用递归算法来解决这一问题。文章提供了完整的Java代码实现,展示了如何计算给定数量的A、B、C等字符的不同排列组合。

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

假设有2个A,2个B,2个C
我想表达的思路是这样的
首先将一个A组合 接下来是两个A,它们都是只有一个组合的

A
AA

一个B和两个A的时候

BAA
ABA
AAB

两个B和两个A的时候

B BAA
B ABA
B AAB

ABBA
ABAB

AABB

相当于把两A两B的看成相同的数,那就是4个字符之间有5个空个C插入,那就是5*(两A两B组合的数)=30

C BBAA
C BABA
C BAAB
C ABBA
C ABAB
C AABB

A C BBA
A C BAB
A C ABB
B C AAB
B C ABA
B C BAA

AA C BB
BB C AA
AB C AB
AB C BA
BA C AB
BA C BA

AAB C B
ABA C B
BAA C B
BBA C A
BAB C A
ABB C A

AABB C
ABAB C
ABBA C
BABA C
BAAB C
BBAA C

好,废话不多说,直接上代码

package cn.LanQiaoBeiAlgorithm.Ravanla;

public class n_A_m_B_k_C_Array {
	public static void main(String[] args) {
		int n = 2;//A
		int m = 2;//B
		int k = 1;//C
		System.out.println(f(n, m)*f(n+m, k);// 这里为什么要用乘法呢, 可以看上面两B 和两A 和一C的组合例子
		// A和B 组合好了有六组,C再跟他们的组合就是在他们之间找空位插入组合
	}
	//组合方法
	//假如只有1个A和1个B,把这个组合分两个阵营,一个是A阵营(A开头),一个是B阵营(B开头)
	//接下来就都交给递归去处理分阵营的问题了
	private static int f(int n, int m) {
		if(n == 0 || m == 0) return 1;
		return f(n - 1, m) + f(n, m - 1);
	}
}
//https://blog.csdn.net/weixin_43584220/article/details/88910775

打好草稿的时候我Eclipse坏了,验证不了代码准确性,只能拿我之前写过的改改了
Intellij IDEA还不会用

//加多三个D
		int n = 2;//A
		int m = 2;//B
		int k = 1;//C
		int j = 3;//D
		System.out.println(f(n, m) * f(n+m, k) * f(n+m+k, j);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值