【时间】2019.05.25
【题目】【力扣】78.子集 (python解法)
题目链接:https://leetcode-cn.com/problems/subsets/
题目描述:
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]题目解法:
#方法1:递归方法,[1,2,3] --> ([1] + [2,3]子集)+[2,3]子集 class Solution: def subsets(self, nums) : res = [] if not nums: return [[]] else: sub = self.subsets(nums[1:]) res = res + sub for s in sub: res.append(nums[:1]+s) return res #方法2 位运算方法:对每一位为1的表示这一位的数字存在,例如对于输入[1,2,3] 编码i=001,表示只含有3,编码i=101.表示含有1,3 class Solution: def subsets(self, nums): t=len(nums) res=[] for i in range(2**t): tmp=[] for j in range(t): if i&(1<<j): tmp.append(nums[t-1-j]) res.append(tmp) return res #方法三 排列组合 class Solution: def subsets(self, nums): from itertools import combinations print([list(s) for s in list(combinations(nums, 2))]) return sum([list(combinations(nums, i)) for i in range(len(nums) + 1)], []) #方法四:遇到一个数添加一下 class Solution: def subsets(self, nums): res = [] res.append([]) for x in nums: new = [s+ [x] for s in res] res = res + new return res #方法五:回溯方法 https://leetcode-cn.com/problems/subsets/solution/hui-su-jie-fa-by-jawhiow/ class Solution(object): def __init__(self): self.result_all = None def subsets(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ self.result_all = [] self.dfs(nums, 0, 0, []) return self.result_all def dfs(self, nums, n, start, result): self.result_all.append(result[:]) if len(nums) == n: return for i in range(start, len(nums)): result.append(nums[i]) self.dfs(nums, n + 1, i + 1, result) result.pop() return s=Solution() nums = [1,2,3] out = s.subsets(nums) print(out)