您好,匿名用户
随意问技术百科期待您的加入

求一则算法(python)

0 投票

罗列出qwerty.分割的所有情况:

q.werty
q.w.erty
qw.erty
...
q.w.e.r.t.y
用户头像 提问 2012年 12月1日 @ Graves 上等兵 (254 威望)
分享到:

1个回答

0 投票
 
最佳答案

楼主 这个问题其实不难,首先肯定的是“点”是存在于两个字母之间的 ,那么你就想象有n个“位置”在n+1个字母之间,每一个“位置”有两个状态,一个是存在“点”,一个是不存在“点”,都不存在的情况被排除掉了,所以本题的核心是求集合的非空子集。所有的可能性的个数为 2^n - 1

假设 字符串为qwer,那么有三个“位置”,我们把这个三个“位置”分别命名为a,b,c
那个通过循环和二进制位的判断可以得出所有的结果
楼主静下心来看看下面的结果,悟一下,算法的复杂度还是蛮低的
index从 1 到 2^n-1 (<=) 循环,每一步判断当前index中二进制位为1对应的位,然后将"点"放到相应的位置,下面的例子当到2^3-1也就是7的时候,三个“位置”上都放上了“点”

c   b   a   
0   0   1      qwe.r 
0   1   0      qw.er
0   1   1      qw.e.r
1   0   0      q.wer
1   0   1      q.we.r
1   1   0      q.w.er
1   1   1      q.w.e.r

我自己之前写过一个SKU相关的算法,其实本质和这个问题是一样的,可以参见 http://geeklu.com/2012/09/sku/

用户头像 回复 2012年 12月1日 @ Zilean 上等兵 (230 威望)
选中 2012年 12月1日 @Graves
提一个问题:

相关问题

0 投票
1 回复 47 阅读
用户头像 提问 2012年 12月1日 @ Nasus 上等兵 (329 威望)
+1 投票
0 回复 25 阅读
0 投票
1 回复 78 阅读
0 投票
1 回复 31 阅读
用户头像 提问 2012年 12月1日 @ Gangplank 上等兵 (314 威望)
+1 投票
1 回复 42 阅读
用户头像 提问 2013年 9月10日 @ hacker 上等兵 (362 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...