給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。
說明:解集不能包含重複的子集。
示例:輸入: nums = [1,2,3]
輸出:[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
]求乙個陣列元素的所有組合;求乙個集合的冪集
回溯法
/*
求乙個集合的冪集
用遞迴求解
*/class
solution
} vector
int>>
subsets
(vector<
int>
& nums)))
;//將空集加入
陣列中的元素可以選擇放或不放入子集中,有2個狀態,將每個元素作為乙個節點或物件來考慮,可用層次遍歷或dfs。
/*
求乙個集合的冪集
用層次遍歷求解
*/class
solution);
//新增空集
int len = nums.
size()
;for
(int i =
0; i < len;
++i)
}return res;}}
;
/*
求乙個集合的冪集
用dfs求解
*/class
solution
tmp.
push_back
(nums[idx]);
//新增nums[idx]
res.
push_back
(tmp)
;dfs
(nums, idx +1)
; tmp.
pop_back()
;//不新增nums[idx]
dfs(nums, idx +1)
;}vector
int>>
subsets
(vector<
int>
& nums));
dfs(nums,0)
;return res;}}
;
將每個子集可對映為乙個二進位制數,如三元素的陣列有2
32^3
23個子集,對應的二進位制數為0~2^3 - 1,如nums = 中子集對應的二進位制數為101。
/*
求乙個集合的冪集
用dfs求解
力扣 78 子集
給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。該題目來自力扣題庫 示例輸入 nums 1,2,3 輸出 1 2 1,2 3 1,3 2,3 1,2,3 思路使用位圖法 如果該陣列的長度是n,那麼該陣列的所有子集數目是2 n.使用兩層迴圈,外層...
力扣 78 子集
給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 利用位數為陣列長度的二進位制數,這個二進位制數所能表示的元素個數剛好等於這個冪集的子集的個數,且二進位制數的...
子集(力扣第78題)
題目 給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 分析 子集的大小可以是從0到nums.length,也就是可以為空集,也可以和原始集合一模一樣。此題還...