生成由"a-z"26 位字母组成的 ,五位长度的所有字符串,不限语言,不限方法!

2014-09-12 15:10:49 +08:00
 xming
7922 次点击
所在节点    问与答
62 条回复
zhs227
2014-09-12 22:08:40 +08:00
@lightening 高手,刚出去的路上还在想着组合有什么办法呢, Rails的数组太强大了
artwalk
2014-09-12 22:25:08 +08:00
```Swift
let alp = "abcdefghijklmnopqrstuvwxyz"

func puts (s:String, i:Int) {
if i <= 0 {
println(s)
return
}

for c in alp {
puts (("\(c)" + s), i - 1)
}
}

puts ("", 5)


```

求更简单的办法

PS:
1. Playground 测试用的 `puts ("", 3)` ,没敢直接上 5
2. Ruby 的太变态了,这也是我喜欢的原因
orzfly
2014-09-12 22:29:38 +08:00
@lightening combination 是不会重复的,你需要 repeated_combination。

[*?a..?z].repeated_combination(5).map(&:join)
orzfly
2014-09-12 22:30:59 +08:00
顺带一提 ruby 还可以这样…… [*?a*5..?z*5]
zakokun
2014-09-12 22:41:10 +08:00
这是我写的很傻的php....生成的文件有67M......
<script src="https://gist.github.com/zakokun/f7fbe7e3f9d7410396e7.js"></script>
feiyuanqiu
2014-09-12 23:21:37 +08:00
@zakokun ...不用这么复杂,字母都是ascii码,可以用循环来生成的,一行代码就解决了
26*26*26*26*26*6/1024/1024 = 67
你的结果是对的...
lightening
2014-09-12 23:29:08 +08:00
@orzfly 啊,看错需求了……
zakokun
2014-09-12 23:37:24 +08:00
@feiyuanqiu 看了下你写的,好神奇......学习了
xiaowangge
2014-09-12 23:52:36 +08:00


笨办法来了。
xiaowangge
2014-09-13 00:01:27 +08:00
又读了一遍需求,是「所有」 :-)
feiyuanqiu
2014-09-13 00:59:05 +08:00
@zakokun ...我的写错了,不能用 <=号,只能用< 或者!=。

原因是:在PHP中,对字母进行增减运算时遵循的是Perl的方式而不是C的,在Perl中,是通过首字母比较大小:比如,b > az。

具体到这里:
当$i = 'zzzzz'的时候,$i <= 'zzzzz'是成立的,循环不会终止,这时$i++ => 'aaaaaa','aaaaaa' < 'zzzzz',循环继续...直到$i = 'yzzzzz',这时,$i < 'zzzzz',$i++ => 'zaaaaa', $i > 'zzzzz',循环终止。所以最后一个输出是 ’yzzzzz';

http://stackoverflow.com/questions/4098345/why-doesnt-this-code-simply-print-letters-a-to-z

修改之后是这样的:
for ($i = 'aaaaa'; $i < 'zzzzz'; $i++) { echo $i; } echo $i;
或者:
$c = 'aaaaa';
for ($i = 0; $i < 11881376; $i++) { echo $c++; }
mudenng
2014-09-13 01:00:50 +08:00
C++版的。。。就是个DFS
feiyuanqiu
2014-09-13 01:03:40 +08:00
for ($c = 'aaaaa', $i = 0; $i < 11881376; $i++, $c++) { echo $c; }
zeq
2014-09-13 08:36:06 +08:00
zeq
2014-09-13 08:47:07 +08:00
@zeq 搞错了, 唉~
jsq2627
2014-09-13 12:17:12 +08:00
上面都是发代码的,我来发点算法的知识吧。
http://www.cnblogs.com/autosar/archive/2012/04/08/2437799.html
zakokun
2014-09-13 13:00:18 +08:00
@feiyuanqiu 确实,不能用 $i <='zzzzz' 但我想了下, 'zaaaaa', 依然是小于 'zzzzz'的诶,直到 $i='zzzzzy'的时候,$i+1='zzzzzz'这时候才大于'zzzzz' 才会跳出循环.是这样吧?
feiyuanqiu
2014-09-13 13:11:07 +08:00
@zakokun 实际上是zzzzyz
zqhong
2014-09-13 13:23:59 +08:00
@xiaowangge 你这样好像是随机产生 'a-zA-Z'的5位数字吧?
我这边的运行结果:
➜ src ./test.py
RVTwn
➜ src ./test.py
akJtF
➜ src ./test.py
IXSJU
zakokun
2014-09-13 13:29:19 +08:00
@feiyuanqiu you are right......

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/133080

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX