19 个解决方案
#1
IEnumerable<string> GetPath(int n)
{
if (n == 1)
{
for (char c = 'a'; c <= 'z'; (int)c++)
yield return c.ToString();
}
else
{
foreach (var item in GetPath(n - 1)
{
yield return item;
for (char c = 'a'; c <= 'z'; (int)c++)
{
yield return item + "\" + c.ToString();
}
}
}
}
使用
GetPath(26).ToList().ForEach(x => Console.WriteLine(x));
#2
DirectoryInfo dir = new DirectoryInfo("E:\\temp");
if (!dir.Exists)
dir.Create();
for (char c = 'A'; c <= 'Z'; c++)
{
dir = new DirectoryInfo(dir.FullName + "\\" + c.ToString());
dir.Create();
}
#3
A 下还有26个文件夹?
#4
文件夹是烟幕弹,这其实是考26个字母全排列算法...这要看不出来真该去面壁了...
不错的面试题,很容易看出受测者的水平...
ps:1楼的思路对,不过你那伪代码真要跑起来...26!个结果哦,大部分计算机会崩溃的...
pps:不会真的有人无聊到去折磨自己的硬盘吧...
不错的面试题,很容易看出受测者的水平...
ps:1楼的思路对,不过你那伪代码真要跑起来...26!个结果哦,大部分计算机会崩溃的...
pps:不会真的有人无聊到去折磨自己的硬盘吧...
#5
是哦,这么多文件夹已经多过了现在硬盘的容量了。
假设一个文件夹需要1个字节保存(事实上FAT32需要512B),也需要百亿PB的空间。
1PB = 1024 TB,现在单个硬盘容量是 TB 数量级的。
这个空间几乎相当于人类所有的硬盘加起来都装不下你的文件夹。
#6
全排列 还真不会呀 求解
#7
全排列应该是高中数学知识啊...
不过刚又想了一下,这个比全排列大多了,因为还有部分项是可重复的,结果应该远大于26!的...用递归或多层循环做都不难,但要优化算法就考人了...
#8
我还是觉得lz题目没说清啊。。。
#9
没必要考虑优化,操作系统创建一个文件夹的代价比任何枚举出文件夹名字的算法在数量级上都高。
#10
题目很清楚...
结果是26^n+26^(n-1)+...+26^2+26个文件夹...确实没有存储系统能装得下...
#11
悲剧了。。。思维定式了。
#12
错了...优化是非常有必要的,例如...一层层递归创建文件夹的效率远小于单次循环创建26级目录结构的效率,穷举字符串的效率远小于字符置换的效率,直接利用字符数组的效率远小于大量创建字符串实例的效率...
没人会真的去运行这种代码,但这种海量运算可优化的地方是很多的...
#13
字符置换的效率远小于穷举字符串的效率
写反了...
#14
好吧,你是这么理解的。
#15
悲剧了,越改越错....应该这样说...
一层层递归创建文件夹的效率远低于单次循环创建26级目录结构的效率,穷举字符串的效率远低于字符置换的效率,大量创建字符串实例的效率远低于直接利用字符数组的效率...
这些差别小数量级时可以忽略...数量级大到一定级数,这些差异就很明显了...
一层层递归创建文件夹的效率远低于单次循环创建26级目录结构的效率,穷举字符串的效率远低于字符置换的效率,大量创建字符串实例的效率远低于直接利用字符数组的效率...
这些差别小数量级时可以忽略...数量级大到一定级数,这些差异就很明显了...
#16
悲剧啊,乍一看还真没看出来要这么大的空间。
#17
#18
向楼上的高手们致敬!
#19
0.0
#20
#1
IEnumerable<string> GetPath(int n)
{
if (n == 1)
{
for (char c = 'a'; c <= 'z'; (int)c++)
yield return c.ToString();
}
else
{
foreach (var item in GetPath(n - 1)
{
yield return item;
for (char c = 'a'; c <= 'z'; (int)c++)
{
yield return item + "\" + c.ToString();
}
}
}
}
使用
GetPath(26).ToList().ForEach(x => Console.WriteLine(x));
#2
DirectoryInfo dir = new DirectoryInfo("E:\\temp");
if (!dir.Exists)
dir.Create();
for (char c = 'A'; c <= 'Z'; c++)
{
dir = new DirectoryInfo(dir.FullName + "\\" + c.ToString());
dir.Create();
}
#3
A 下还有26个文件夹?
#4
文件夹是烟幕弹,这其实是考26个字母全排列算法...这要看不出来真该去面壁了...
不错的面试题,很容易看出受测者的水平...
ps:1楼的思路对,不过你那伪代码真要跑起来...26!个结果哦,大部分计算机会崩溃的...
pps:不会真的有人无聊到去折磨自己的硬盘吧...
不错的面试题,很容易看出受测者的水平...
ps:1楼的思路对,不过你那伪代码真要跑起来...26!个结果哦,大部分计算机会崩溃的...
pps:不会真的有人无聊到去折磨自己的硬盘吧...
#5
是哦,这么多文件夹已经多过了现在硬盘的容量了。
假设一个文件夹需要1个字节保存(事实上FAT32需要512B),也需要百亿PB的空间。
1PB = 1024 TB,现在单个硬盘容量是 TB 数量级的。
这个空间几乎相当于人类所有的硬盘加起来都装不下你的文件夹。
#6
全排列 还真不会呀 求解
#7
全排列应该是高中数学知识啊...
不过刚又想了一下,这个比全排列大多了,因为还有部分项是可重复的,结果应该远大于26!的...用递归或多层循环做都不难,但要优化算法就考人了...
#8
我还是觉得lz题目没说清啊。。。
#9
没必要考虑优化,操作系统创建一个文件夹的代价比任何枚举出文件夹名字的算法在数量级上都高。
#10
题目很清楚...
结果是26^n+26^(n-1)+...+26^2+26个文件夹...确实没有存储系统能装得下...
#11
悲剧了。。。思维定式了。
#12
错了...优化是非常有必要的,例如...一层层递归创建文件夹的效率远小于单次循环创建26级目录结构的效率,穷举字符串的效率远小于字符置换的效率,直接利用字符数组的效率远小于大量创建字符串实例的效率...
没人会真的去运行这种代码,但这种海量运算可优化的地方是很多的...
#13
字符置换的效率远小于穷举字符串的效率
写反了...
#14
好吧,你是这么理解的。
#15
悲剧了,越改越错....应该这样说...
一层层递归创建文件夹的效率远低于单次循环创建26级目录结构的效率,穷举字符串的效率远低于字符置换的效率,大量创建字符串实例的效率远低于直接利用字符数组的效率...
这些差别小数量级时可以忽略...数量级大到一定级数,这些差异就很明显了...
一层层递归创建文件夹的效率远低于单次循环创建26级目录结构的效率,穷举字符串的效率远低于字符置换的效率,大量创建字符串实例的效率远低于直接利用字符数组的效率...
这些差别小数量级时可以忽略...数量级大到一定级数,这些差异就很明显了...
#16
悲剧啊,乍一看还真没看出来要这么大的空间。
#17
#18
向楼上的高手们致敬!
#19
0.0