{ "question_id": 78, "question_title": "子集", "difficulty": "中等", "question_content": "<p>给你一个整数数组 <code>nums</code> ,数组中的元素 <strong>互不相同</strong> 。返回该数组所有可能的子集(幂集)。</p><p>解集 <strong>不能</strong> 包含重复的子集。你可以按 <strong>任意顺序</strong> 返回解集。</p><p> </p><p><strong>示例 1:</strong></p><pre><strong>输入:</strong>nums = [1,2,3]<strong><br />输出:</strong>[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]</pre><p><strong>示例 2:</strong></p><pre><strong>输入:</strong>nums = [0]<strong><br />输出:</strong>[[],[0]]</pre><p> </p><p><strong>提示:</strong></p><ul>\t<li><code>1 <= nums.length <= 10</code></li>\t<li><code>-10 <= nums[i] <= 10</code></li>\t<li><code>nums</code> 中的所有元素 <strong>互不相同</strong></li></ul>", "topic_link": "https://bbs.csdn.net/topics/600469824", "cpp": "#include <bits/stdc++.h>\nusing namespace std;\nclass Solution\n{\npublic:\n\tvector<vector<int>> subsets(vector<int> &nums)\n\t{\n\t\tvector<vector<int>> res;\n\t\tdfs(nums, 0, res);\n\t\treturn res;\n\t}\nprivate:\n\tvector<int> stack;\n\tvoid dfs(vector<int> &nums, int start, vector<vector<int>> &res)\n\t{\n\t\tres.push_back(stack);\n\t\tfor (int i = start; i < nums.size(); i++)\n\t\t{\n\t\t\tstack.push_back(nums[i]);\n\t\t\tdfs(nums, i + 1, res);\n\t\t\tstack.pop_back();\n\t\t}\n\t}\n};", "java": "class Solution {\n\tpublic List<List<Integer>> subsets(int[] nums) {\n\t\tList<List<Integer>> res = new ArrayList<List<Integer>>();\n\t\tList<Integer> tmp = new ArrayList<>();\n\t\tres.add(tmp);\n\t\tif (nums.length == 0)\n\t\t\treturn res;\n\t\thelper(nums, 0, tmp, res);\n\t\treturn res;\n\t}\n\n\tpublic void helper(int[] nums, int start, List<Integer> tmp, List<List<Integer>> res) {\n\t\tfor (int i = start; i < nums.length; i++) {\n\t\t\ttmp.add(nums[i]);\n\t\t\thelper(nums, i + 1, tmp, res);\n\t\t\tres.add(new ArrayList<Integer>(tmp));\n\t\t\ttmp.remove(tmp.size() - 1);\n\t\t}\n\t}\n}", "js": "", "python": "class Solution(object):\n\tdef subsets(self, nums):\n\t\tnums.sort()\n\t\tres = [[]]\n\t\tfor index in range(len(nums)):\n\t\t\tsize = len(res)\n\t\t\tfor j in range(size):\n\t\t\t\tcurr = list(res[j])\n\t\t\t\tcurr.append(nums[index])\n\t\t\t\tres.append(curr)\n\t\treturn res\nif __name__ == \"__main__\":\n\ts = Solution()\n\tprint (s.subsets([1,2,3]))", "status": 1, "keywords": "位运算,数组,回溯", "license": { "cpp": "https://github.com/begeekmyfriend/leetcode", "python": "https://github.com/qiyuangong/leetcode", "java": "https://github.com/zhangyu345293721/leetcode" }, "notebook": { "cpp": "https://codechina.csdn.net/csdn/csdn-daily-code/-/jupyter/master/data/notebook/leetcode/ipynb/77/77_cpp.ipynb?type=file", "python": "https://codechina.csdn.net/csdn/csdn-daily-code/-/jupyter/master/data/notebook/leetcode/ipynb/77/77_python.ipynb?type=file", "java": "https://codechina.csdn.net/csdn/csdn-daily-code/-/jupyter/master/data/notebook/leetcode/ipynb/77/77_java.ipynb?type=file" }, "notebook_enable": 1 }