荒废计算机太久了,以至于这么简单一个问题想了我大半天,其实就是数组求组合输出的方法,写下此日志提醒自己不能忘了老本!
题目的话大概可以这样表述
给出一个数据A={a_0,a_1,a_2…a_n}(其中n可变),打印出该数值元素的所有组合
需要使用递归的方法解决比较好,分而治之
给一大团数据{a0,a1, a2, …, an}:
1. 如果就剩一个元素的话,我就输出它,结束;
2.不输出a0,把除了我之外的余下一团交由递归处理;
3.要输出a0自己,然后余下一团交由递归处理;
其中case 3里面需要注意下一个递归要记住a0是要输出的,所以实践起来就是带了个前缀一样的东西记住。感觉这种排列组合的问题应该也可以用栈来解决,但归根结底还是分治。
用Python随意写了一个:
# coding:utf-8 def foo(inary, appendix=''): if len(inary) == 0: return #Case 0 print appendix + str(inary[0]) if len(inary) < 2: return #Case 1 foo(inary[1:], appendix) #Case 2 #print str(inary[0]), foo(inary[1:], appendix+str(inary[0]))
测试输出:
>>> foo([1, 2, 3, 4]) 1 2 3 4 34 23 24 234 12 13 14 134 123 124 1234