你好,我一直在尝试解决https://leetcode.com/problems/subsets/这是powerset函数。
我写了这两个不同的版本:
def subsets_hash(s):
sets = set()
sets.add(tuple(s))
for i in range(len(s)):
tmp_subsets = subsets_hash(s[:i] + s[i+1:])
for subset in tmp_subsets:
if subset not in sets:
sets.add(subset)
return sets
def subsets_array(s):
sets = [s]
for i in range(len(s)):
tmp_subsets = subsets_array(s[:i] + s[i+1:])
for subset in tmp_subsets:
if subset not in sets:
sets.append(subset)
return sets
当我使用相同的输入对这2个对象进行计时时,我可以看到它们在计时方面确实很接近,但是从查看代码的角度来看,subsets_hash
是否应该更快?
第二个for循环for subset in tmp_subsets:
是在集合而不是列表上完成的,并且考虑到tmp_subsets
增长到大小2^n
(最终包含所有子集),我应该快一点由于集合所有权为2^n
,因此第一个函数的系数为O(1)
。
欢迎大家澄清这一点。