版权声明:071623 https://blog.csdn.net/weixin_43584220/article/details/88933002
假设有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
CBBAA
CBABA
CBAAB
CABBA
CABAB
CAABB
ACBBA
ACBAB
ACABB
BCAAB
BCABA
BCBAA
AACBB
BBCAA
ABCAB
ABCBA
BACAB
BACBA
AABCB
ABACB
BAACB
BBACA
BABCA
ABBCA
AABBC
ABABC
ABBAC
BABAC
BAABC
BBAAC
好,废话不多说,直接上代码
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);
}
//组合方法
//假如只有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);