急,求助用26个字母生成文件夹,递归至26层

时间:2022-08-06 12:27:41
用26个字母生成文件夹,递归至26层,相当于有文件夹TEMP下有26个文件夹,而字母A、B、B...下又有26个,依次到26层!有知道怎么做朋友教下,谢谢!分不多,略表心意!

19 个解决方案

#1


本帖最后由 caozhy 于 2011-05-10 18:23:32 编辑
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:不会真的有人无聊到去折磨自己的硬盘吧...

#5


引用 4 楼 vrhero 的回复:
文件夹是烟幕弹,这其实是考26个字母全排列算法...这要看不出来真该去面壁了...

不错的面试题,很容易看出受测者的水平...

ps:1楼的思路对,不过你那伪代码真要跑起来...26!个结果哦,大部分计算机会崩溃的...

pps:不会真的有人无聊到去折磨自己的硬盘吧...

是哦,这么多文件夹已经多过了现在硬盘的容量了。
假设一个文件夹需要1个字节保存(事实上FAT32需要512B),也需要百亿PB的空间。
1PB = 1024 TB,现在单个硬盘容量是 TB 数量级的。
这个空间几乎相当于人类所有的硬盘加起来都装不下你的文件夹。

#6


 全排列 还真不会呀 求解

#7


引用 6 楼 liaoyukun111 的回复:
 全排列 还真不会呀 求解

全排列应该是高中数学知识啊...

不过刚又想了一下,这个比全排列大多了,因为还有部分项是可重复的,结果应该远大于26!的...用递归或多层循环做都不难,但要优化算法就考人了...

#8


我还是觉得lz题目没说清啊。。。

#9


引用 7 楼 vrhero 的回复:
引用 6 楼 liaoyukun111 的回复:
全排列 还真不会呀 求解

全排列应该是高中数学知识啊...

不过刚又想了一下,这个比全排列大多了,因为还有部分项是可重复的,结果应该远大于26!的...用递归或多层循环做都不难,但要优化算法就考人了...

没必要考虑优化,操作系统创建一个文件夹的代价比任何枚举出文件夹名字的算法在数量级上都高。

#10


引用 8 楼 fangxinggood 的回复:
我还是觉得lz题目没说清啊。。。

题目很清楚...

结果是26^n+26^(n-1)+...+26^2+26个文件夹...确实没有存储系统能装得下...

#11


悲剧了。。。思维定式了。

#12


引用 9 楼 caozhy 的回复:
没必要考虑优化,操作系统创建一个文件夹的代价比任何枚举出文件夹名字的算法在数量级上都高。

错了...优化是非常有必要的,例如...一层层递归创建文件夹的效率远小于单次循环创建26级目录结构的效率,穷举字符串的效率远小于字符置换的效率,直接利用字符数组的效率远小于大量创建字符串实例的效率...

没人会真的去运行这种代码,但这种海量运算可优化的地方是很多的...

#13


引用 12 楼 vrhero 的回复:
穷举字符串的效率远小于字符置换的效率

字符置换的效率远小于穷举字符串的效率

写反了...

#14


引用 12 楼 vrhero 的回复:
引用 9 楼 caozhy 的回复:
没必要考虑优化,操作系统创建一个文件夹的代价比任何枚举出文件夹名字的算法在数量级上都高。

错了...优化是非常有必要的,例如...一层层递归创建文件夹的效率远小于单次循环创建26级目录结构的效率,穷举字符串的效率远小于字符置换的效率,直接利用字符数组的效率远小于大量创建字符串实例的效率...

没人会真的去运行这种代码,但这种海量运算可优化的地方是……

好吧,你是这么理解的。

#15


悲剧了,越改越错....应该这样说...

一层层递归创建文件夹的效率远低于单次循环创建26级目录结构的效率,穷举字符串的效率远低于字符置换的效率,大量创建字符串实例的效率远低于直接利用字符数组的效率...


这些差别小数量级时可以忽略...数量级大到一定级数,这些差异就很明显了...

#16


悲剧啊,乍一看还真没看出来要这么大的空间。

#17


该回复于2011-05-11 09:55:23被版主删除

#18


向楼上的高手们致敬! 急,求助用26个字母生成文件夹,递归至26层

#19


急,求助用26个字母生成文件夹,递归至26层0.0

#1


本帖最后由 caozhy 于 2011-05-10 18:23:32 编辑
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:不会真的有人无聊到去折磨自己的硬盘吧...

#5


引用 4 楼 vrhero 的回复:
文件夹是烟幕弹,这其实是考26个字母全排列算法...这要看不出来真该去面壁了...

不错的面试题,很容易看出受测者的水平...

ps:1楼的思路对,不过你那伪代码真要跑起来...26!个结果哦,大部分计算机会崩溃的...

pps:不会真的有人无聊到去折磨自己的硬盘吧...

是哦,这么多文件夹已经多过了现在硬盘的容量了。
假设一个文件夹需要1个字节保存(事实上FAT32需要512B),也需要百亿PB的空间。
1PB = 1024 TB,现在单个硬盘容量是 TB 数量级的。
这个空间几乎相当于人类所有的硬盘加起来都装不下你的文件夹。

#6


 全排列 还真不会呀 求解

#7


引用 6 楼 liaoyukun111 的回复:
 全排列 还真不会呀 求解

全排列应该是高中数学知识啊...

不过刚又想了一下,这个比全排列大多了,因为还有部分项是可重复的,结果应该远大于26!的...用递归或多层循环做都不难,但要优化算法就考人了...

#8


我还是觉得lz题目没说清啊。。。

#9


引用 7 楼 vrhero 的回复:
引用 6 楼 liaoyukun111 的回复:
全排列 还真不会呀 求解

全排列应该是高中数学知识啊...

不过刚又想了一下,这个比全排列大多了,因为还有部分项是可重复的,结果应该远大于26!的...用递归或多层循环做都不难,但要优化算法就考人了...

没必要考虑优化,操作系统创建一个文件夹的代价比任何枚举出文件夹名字的算法在数量级上都高。

#10


引用 8 楼 fangxinggood 的回复:
我还是觉得lz题目没说清啊。。。

题目很清楚...

结果是26^n+26^(n-1)+...+26^2+26个文件夹...确实没有存储系统能装得下...

#11


悲剧了。。。思维定式了。

#12


引用 9 楼 caozhy 的回复:
没必要考虑优化,操作系统创建一个文件夹的代价比任何枚举出文件夹名字的算法在数量级上都高。

错了...优化是非常有必要的,例如...一层层递归创建文件夹的效率远小于单次循环创建26级目录结构的效率,穷举字符串的效率远小于字符置换的效率,直接利用字符数组的效率远小于大量创建字符串实例的效率...

没人会真的去运行这种代码,但这种海量运算可优化的地方是很多的...

#13


引用 12 楼 vrhero 的回复:
穷举字符串的效率远小于字符置换的效率

字符置换的效率远小于穷举字符串的效率

写反了...

#14


引用 12 楼 vrhero 的回复:
引用 9 楼 caozhy 的回复:
没必要考虑优化,操作系统创建一个文件夹的代价比任何枚举出文件夹名字的算法在数量级上都高。

错了...优化是非常有必要的,例如...一层层递归创建文件夹的效率远小于单次循环创建26级目录结构的效率,穷举字符串的效率远小于字符置换的效率,直接利用字符数组的效率远小于大量创建字符串实例的效率...

没人会真的去运行这种代码,但这种海量运算可优化的地方是……

好吧,你是这么理解的。

#15


悲剧了,越改越错....应该这样说...

一层层递归创建文件夹的效率远低于单次循环创建26级目录结构的效率,穷举字符串的效率远低于字符置换的效率,大量创建字符串实例的效率远低于直接利用字符数组的效率...


这些差别小数量级时可以忽略...数量级大到一定级数,这些差异就很明显了...

#16


悲剧啊,乍一看还真没看出来要这么大的空间。

#17


该回复于2011-05-11 09:55:23被版主删除

#18


向楼上的高手们致敬! 急,求助用26个字母生成文件夹,递归至26层

#19


急,求助用26个字母生成文件夹,递归至26层0.0

#20