免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1920 | 回复: 9
打印 上一主题 下一主题

一道题,做做看 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-27 17:18 |只看该作者 |倒序浏览
数组['a','b','c','d']

输出该数组的全组合

论坛徽章:
0
2 [报告]
发表于 2009-03-27 17:35 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2009-03-27 17:41 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2009-03-27 18:33 |只看该作者
原帖由 teebye 于 2009-3-27 17:41 发表

看清楚题目,是组合,不是排列





你先看清楚别人回复,答案就在他那几个连接里

论坛徽章:
0
5 [报告]
发表于 2009-03-27 18:38 |只看该作者
def output(s):
    for i in range(1<<len(s)):
        if (i):
            temp=""
            for j in range(len(s)):
                if (i&(1<<j)):
                    temp=temp+s[j]
            print(temp)
s="abcd"
output(s)
我来了,简单起见,当作字符串,希望不介意,输出如下:
a
b
ab
c
ac
bc
abc
d
ad
bd
abd
cd
acd
bcd
abcd

论坛徽章:
0
6 [报告]
发表于 2009-03-27 18:39 |只看该作者
我用了位操作,直接枚举就得了,省得费事,时间复杂度是O(n*(2^n))。

论坛徽章:
0
7 [报告]
发表于 2009-03-27 20:34 |只看该作者

论坛徽章:
0
8 [报告]
发表于 2009-03-27 20:37 |只看该作者
原帖由 teebye 于 2009-3-27 17:41 发表

看清楚题目,是组合,不是排列

不好意思,看成排列了

论坛徽章:
0
9 [报告]
发表于 2009-03-28 11:20 |只看该作者
求数组['a','b','c','d']所有组合的演算步骤:
''
'' a
'' a b ba
'' a b ba c ca cb cba
'' a b ba c ca cb cba d da db dba dc dca dcb dcba

def subset(s):
    v=[""]
    for c in s:
        v+=[ c + e for e in v]
    return v

print subset(['a','b','c','d'])[1:]


[ 本帖最后由 x2 于 2009-3-28 11:23 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2009-03-28 18:39 |只看该作者
5楼的算法的演算步骤应该就是:

1    0001    a
2    0010    b
3    0011    ab
4    0100    c
5    0101    ac
6    0110    bc
7    0111    abc
8    1000    d
9    1001    ad
10  1010    bd
11  1011    abd
12  1100    cd
13  1101    acd
14  1110    bcd
15  1111    abcd
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP