题目:https://leetcode.com/problems/subsets/
题意:给出一个无重复集合的所有子集,如给出{1,2,3},输出1,2,3,12,13,23,123
拿到题目后,第一个想法是怎么更加高效的完成集合计算,怎么拼集合逻辑很简单,但是输出结果是个体力活,在输入较大的情况下,优化一个步骤都会省下很大耗时。
开动,首先是语言选型,c语言输出太惨,因为leetcode说他会想办法free,那么就不能一次性malloc大内存了;c++使用vector,深拷贝不是很爽;python也类似,引用的list没法弄,深拷贝效率就那样。因为不需要考虑输出顺序,那么如果能复用空间还是很爽的,最终决定用go语言试试,利用slice的特性,复用地址搞一些事情。
思路1. 先构造base数组,使用实打实的内存,冉后复用这些内存,尽可能的复用空间。
比如:{1,2,3} ,只要构造两个slice即可:a={1,2,3} b={1,3}
输出结果就是 a[0], a[1], a[2],a[0:1],a[1:2],a,b
对应的slice:1,2,3,12,23,123,13
难点:1)怎么生成base数组,2)在不同的base数组中,怎么保证不重叠
--- 睡了,明天更(我不是睡了,我只是闭眼思考让自己精力集中在脑子里)