【发布时间】:2023-11-22 02:48:01
【问题描述】:
您好,我正在尝试通过重复给定 char 数组来获取所有可能的组合。 Char 数组由字母组成(仅较低),我需要生成长度为 30 个或更多字符的字符串。
我尝试了许多 for 循环的方法,但是当我尝试在字符串长度超过 5 的 char 数组中获取 char 的所有组合时,我退出了内存异常。
所以我创建了类似的方法,它只需要前 200000 个字符串,然后是下一个 2000000,依此类推,这被证明是成功的,但只有长度更小的字符串。
这是我的方法,长度为 7 个字符:
public static int Progress = 0;
public static ArrayList CreateRngUrl7()
{
ArrayList AllCombos = new ArrayList();
int passed = 0;
int Too = Progress + 200000;
char[] alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToLower().ToCharArray();
for (int i = 0; i < alpha.Length; i++)
for (int i1 = 0; i1 < alpha.Length; i1++)
for (int i2 = 0; i2 < alpha.Length; i2++)
for (int i3 = 0; i3 < alpha.Length; i3++)
for (int i4 = 0; i4 < alpha.Length; i4++)
for (int i5 = 0; i5 < alpha.Length; i5++)
for (int i6 = 0; i6 < alpha.Length; i6++)
{
if (passed > (Too - 200000) && passed < Too)
{
string word = new string(new char[] { alpha[i], alpha[i1], alpha[i2], alpha[i3], alpha[i4], alpha[i5],alpha[i6] });
AllCombos.Add(word);
}
passed++;
}
if (Too >= passed)
{
MessageBox.Show("All combinations of RNG7 were returned");
}
Progress = Too;
return AllCombos;
}
我尝试以上述方式添加 30 个 for 循环,所以我会得到长度为 30 的字符串,但应用程序只是挂起。有没有更好的方法来做到这一点?所有答案将不胜感激。提前谢谢!
有人可以发布方法如何处理更大的长度字符串我只想看一个例子吗?我不必存储这些数据,我只需要将它与某些东西进行比较并从内存中释放它。例如,我使用字母表我不需要整个字母表。问题不是需要多长时间或组合多少!!!!!
【问题讨论】:
-
您想要长度超过 30 的字符数组的每个组合?祝你好运!您很快就需要它吗?
-
我可以访问大量计算机。我只需要一个示例方法。
-
您确实意识到它最终将是
30!不同的字符串,每个长度为 30。即 1.6*10^34 字节。除非你是谷歌,否则你不能存储它(如果他们可以的话) -
有 2,813,198,901,284,750,000,000,000,000,000,000,000,000,000 个不同的 30 个字符串由 26 个字母组成。如果您能够每微秒计算一个新字符串,则将需要 89,205,951,968,694,400,000 亿年才能将它们全部计算出来。相比之下,地球的年龄估计为 45 亿年。祝你好运!
-
好吧,我的数学记错了,它是
26!(字母表中的 26 个字符),但仍然是2.5*10^28字节
标签: c# char combinations