給你乙個整數陣列nums
,返回該陣列所有可能的子集(冪集)。解集不能包含重複的子集。
示例 1:
輸入:nums = [1,2,3]
輸出:[,[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
輸入:nums = [0]
輸出:[,[0]]
class solution
}ans.add(new arraylist(t));
}return ans;}}
注意到這裡1 << n
和1 << i
都用了位運算的左移操作。
以nums = [1,2,3]
為例:
mask < (1 << n)
,即mask < 8
。
mask & (1 << i)
,即mask & 001
、mask & 010
、mask & 100
。
當mask = 0
時,mask & (1 << i)
為0
,所以這裡會向集合ans
新增乙個空的集合t
。
當mask = 1
時,001 & 001 != 0
,所以這裡會向集合t
新增乙個nums[0]
。注意,1
左移0
位為001
。
當mask = 3
時,011 & 001 != 0
,011 & 010 != 0
,所以這裡會向集合t
新增nums[1]
和nums[2]
。
以nums = [1,2,3]
為例:
dfs cur=0 t=1
dfs cur=1 t=1,2
dfs cur=2 t=1,2,3
dfs cur=3 新增[1,2,3]
dfs cur=2 t=1,2
dfs cur=3 新增[1,2]
dfs cur=1 t=1
dfs cur=2 t=1,3
dfs cur=3 新增[1,3]
dfs cur=2 t=1
dfs cur=3 新增[1]
dfs cur=0
dfs cur=1 t=2
dfs cur=2 t=2,3
dfs cur=3 新增[2,3]
dfs cur=2 t=2
dfs cur=3 新增[2]
dfs cur=1
dfs cur=2 t=3
dfs cur=3 新增[3]
dfs cur=2
dfs cur=3 新增
注意,遞迴的邊界條件為cur == nums.length
,cur
是呼叫方法dfs
時傳入的,而不是集合t
的元素個數。
參考:
快速冪 迭代法和遞迴法 python實現
迭代法 def quick power x,n res 1while n 0 如果冪為奇數,把x記錄下來,儲存在res中 if n 2 1 res x 如果冪為偶數 則不記錄,只是處理x,n x x n 1 return res遞迴法 def quick power x,n 特殊情況 if n 0 ...
求字串長度 迭代法和遞迴法)
咱們先來複習一下strlen函式 strlen 字元陣列 它是測試字串長度的函式,函式的值為字串中的實際長度 不包括 0 在內 例如 char str 10 china printf d strlen str 輸出的結果是5 也可以直接測試字串常量的長度,例如 strlen china includ...
一文讀懂鍊錶反轉(迭代法和遞迴法)
單向鍊錶反轉的方法有很多,其中用的比較多的是迭代法和遞迴法,迭代法通俗易懂,遞迴法相對來說比較難理解一些。單向鍊錶反轉圖示 一 迭代法 實現 import lombok.allargsconstructor import lombok.data data allargsconstructor pub...