已知数组A和其大小n,请返回A的所有非空子集。要求A中元素个数不大于20且互异。各子集内部从大到小排序,子集间字典逆序排序。
测试样例:
[123,456,789]
返回:{[789,456,123],[789,456],[789,123],[789],[456 123],[456],[123]}
# -*- coding:utf-8 -*- class Subset: # 返回二维[[],[],[]] def getSubsets(self, A, n): # write code here res = [] A.sort() self.dfs(A, res, []) return sorted(res, key=lambda c: "".join(map(str, c)), reverse=True) def dfs(self, arr, res, path): if path != sorted(path, reverse=True): return if path: res.append(path) if not arr: return for i in arr: a = arr[:] a.remove(i) self.dfs(a, res, path + [i])
# -*- coding:utf-8 -*- class Subset: # 返回二维[[],[],[]] def getSubsets(self, A, n): result = [[A[0]]] for i in range(1, n): tmp = result[:] for j in range(len(tmp)): tmp[j] = [A[i]] + tmp[j] result = tmp + [[A[i]]] + result return result