程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Leetcode刷題Python】78. 子集

編輯:Python

1 題目

給你一個整數數組 nums ,數組中的元素 互不相同 。返回該數組所有可能的子集(冪集)。

解集 不能 包含重復的子集。你可以按 任意順序 返回解集。

示例 1:

輸入:nums = [1,2,3]
輸出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2:

輸入:nums = [0]
輸出:[[],[0]]

2 解析

用二進制中的1來表示當前index的元素是否在子集中。例如,n = 3,a={5,2,9} 時對應的二進制

0-1二進制序列正好對應子集的索引。1表示取當前索引的值,0表示不取。用與運算來計算,二進制中當前位置是否是1。

3 Python實現

class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
ans = []
n = len(nums)
for mask in range(1<<n):
t = []
for i in range(n):
# 與運算,來判斷二進制序列中,當前位置是否是1
if (mask & (1<<i))!=0:
t.append(nums[i])
ans.append(t)
return ans

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved