Given a set of distinct integers, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: nums = [1,2,3] Output: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
求一个集合的所有子集,利用高中排列组合的知识,每个集合元素都有选和不选两种状态,那么集合中若有N个元素,其子集的个数为个。
解题思路不是很难,感觉主要难度在代码实现上,就不多赘述了。
AC代码:
class Solution {
// 递归函数
public void calSubset(int[] nums, int i, ArrayList<Integer> nowList, List<List<Integer>> result) {
// 结束条件是 i == nums.length 也就意味着到达集合末端
if (i == nums.length) {
result.add((List<Integer>) nowList.clone());
return;
}
// 每个集合元素都有选和不选两种情况
calSubset(nums, i + 1, nowList, result);
nowList.add(nums[i]);
calSubset(nums, i + 1, nowList, result);
nowList.remove(nowList.size() - 1);
}
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
ArrayList<Integer> nowList = new ArrayList<>();
calSubset(nums, 0, nowList, result);
return result;
}
}
如有错误,欢迎指摘。也欢迎通过左上角的“向TA提问”按钮问我问题,我将竭力解答你的疑惑。