LeetCode--子集(Subsets)
阿新 • • 發佈:2018-11-01
給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。
說明:解集不能包含重複的子集。
示例:
輸入: nums = [1,2,3]輸出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
class Solution { public: vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> ret; vector<int> t; ret.push_back(t);//先插入一個空集 for (int length = 1; length <= nums.size(); length++)//子集陣列的長度,從1開始到和陣列長度相同 { for (int start = 0; start < nums.size(); start++)//插入資料的起始位置 { vector<int> temp; if (start + length>nums.size() - 1)//防止訪問越界 break; for (int go = start; go < start + length; go++)//從go開始走,到了子集陣列長度時就停 { if (go>nums.size() - 1) break; temp.push_back(nums[go]); } ret.push_back(temp); } } return ret; } };
這是我最初寫的程式,在LeetCode上邊執行程式碼的時候以為沒錯誤就提交了
少了一種[1,3],仔細一想確實自己沒有解決這種情況,而且不知道怎麼才能去解決這種情況,當你有三個資料的時候這種情況只有一種,如果說當你有5個數據的時候,這種非連續子集就多了,124,125,13,14,15.......
class Solution { public: vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> ret(1); if (nums.size() == 0) return ret; for (int i = 0; i<nums.size(); i++) { int size = ret.size(); for (int j = 0; j<size; j++) { ret.push_back(ret[j]); ret.back().push_back(nums[i]); } } return ret; } };