algorithm - 具有特定约束的长度为 N 的密码数

标签 algorithm math recursion logic combinatorics

考虑 26 个字母和 10 个数字的集合。

编写一个函数,返回长度为 N 的密码个数,其中至少包含 L 个小写字母、至少 U 个大写字母和至少 D 个数字。

函数签名int cntPass(int N,int L,int U,int D)

我的方法:

我试图使用递归来解决它,但我认为它是错误的。我的(错误的)递归如下:

f(N,L,U,D)=f(N,L-1,U,D)+f(N,L,U-1,D)+f(N,L,U,D- 1)【有必要的基础条件,但没用】。

我正在寻找更好的方法或不同的逻辑来解决这个问题。

谢谢。

最佳答案

这只是一道简单的组合数学题。结果是NCL * N-LCU * N-L-UCD * 26L * 26U * 10D * 62N - U - L - D,可以简化为 26L + U * 10D * 62N - U - L - D * N!/(U!* L!* D!*(N - L - U - D)!)。

我们在 N 个地方中为小写字符选择 L 个地方。然后在剩下的N-L个地方中选出U个大写字母的地方。并在其余N - L - U位中选择D位作为数字。其余的一切都可以。

L小写字母各有26个选择。 U 大写字母也一样。 D位各有10个选择。对于其余的 (N - L - U - D),我们可以使用 26 + 26 + 10 个字符中的任意一个。

关于algorithm - 具有特定约束的长度为 N 的密码数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14685160/

相关文章:

algorithm - 理解这个 NP 完全优化?

获得达到目标概率的算法

algorithm - 高功率和 double

python - python中Tan的逆(tan-1)

perl - 如何使用 Perl 递归复制目录的内容?

java - 递归和循环哪个更有效?

java - 根据给定的数字或字符串生成范围内的唯一数字

database - 缓存不经意的前瞻数组

javascript - 用于递归函数的 Webworker

javascript - 如何根据对数要求创建尺寸公式