Subsets
Given a set of distinct integers, return all possible subsets.
Notice
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
Example
If S = [1,2,3]
, a solution is:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
class Solution {
/**
* @param S: A set of numbers.
* @return: A list of lists. All valid subsets.
*/
public ArrayList<ArrayList<Integer>> subsets(int[] nums) {
ArrayList<ArrayList<Integer>> lists = new ArrayList<>();
if(nums == null || nums.length == 0) {
return lists;
}
Arrays.sort(nums);
ArrayList<Integer> temp = new ArrayList<>();
helper(nums, lists, temp, 0);
lists.add(new ArrayList<Integer>());
return lists;
}
private void helper(int[] nums, ArrayList<ArrayList<Integer>> lists, ArrayList<Integer> temp, int start) {
for(int i = start; i < nums.length; i++) {
temp.add(nums[i]);
lists.add(new ArrayList<Integer>(temp));
helper(nums, lists, temp, i + 1);
temp.remove(temp.size() - 1);
}
}
}
==========================================================================================
Permutations
Given a list of numbers, return all possible permutations.
Notice
You can assume that there is no duplicate numbers in the list.
Example
For nums = [1,2,3]
, the permutations are:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
class Solution {
/**
* @param nums: A list of integers.
* @return: A list of permutations.
*/
public List<List<Integer>> permute(int[] nums) {
ArrayList<List<Integer>> result = new ArrayList<>();
if(nums == null) {
return result;
}
//empty nums array has one emtpy permutation
if(nums.length == 0) {
result.add(new ArrayList<Integer>());
return result;
}
ArrayList<Integer> temp = new ArrayList<>();
helper(nums, result, temp);
return result;
}
private void helper(int[] nums, ArrayList<List<Integer>> result, ArrayList<Integer> temp) {
if(temp.size() == nums.length) {
result.add(new ArrayList<Integer>(temp));
}
for(int i = 0; i < nums.length; i++) {
if(temp.contains(nums[i])) {
continue;
}
temp.add(nums[i]);
helper(nums, result, temp);
temp.remove(temp.size() - 1);
}
}
}
//subsets:
for(int i = start; i < l; i++)
//permutations:
for(int i = 0; i < l; i++)