LeetCode 78
子集
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
class Solution {
public List<List<Integer>> subsets(int[] nums) {
int val = pow_2(nums.length);
List<List<Integer>> subsets = new ArrayList<List<Integer>>();
for(int i=0; i<val; i++){
List<Integer> list = new ArrayList<Integer>();
int wait = i;
int k = 0;
while(wait != 0){
if(wait % 2 == 1){
list.add(nums[k]);
}
k += 1;
wait /= 2;
}
subsets.add(list);
}
return subsets;
}
public int pow_2(int num){
int mul = 1;
for(int i=0; i<num; i++){
mul *= 2;
}
return mul;
}
}
LeetCode 46
全排列
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> perm = new ArrayList<>();
if(nums.length == 0){
return perm;
}else if(nums.length == 1){
List<Integer> current = new ArrayList<Integer>();
current.add(nums[0]);
perm.add(current);
return perm;
}else{
for(int i=0; i<nums.length; i++){
int current = nums[i];
List<Integer> now = new ArrayList<Integer>();
for(int j=0; j < nums.length; j++){
if(i != j){
now.add(nums[j]);
}
}
int[] inval = now.stream().mapToInt(Integer::intValue).toArray();
List<List<Integer>> cur = permute(inval);
for(int j=0; j<cur.size(); j++){
List<Integer> addpre = cur.get(j);
addpre.add(0, current);
perm.add(addpre);
}
}
}
return perm;
}
}