您的位置:首页 > 编程语言 > Java开发

【Java】subsets

2016-06-11 17:56 465 查看
/**
* Created on 16/6/6.
*/

import java.util.ArrayList;
import java.util.Arrays;
public class getSubsets {
public static void main(String[] args) {
ArrayList<Integer> s = new ArrayList<Integer>();
s.add(1);
s.add(2);
s.add(3);
ArrayList<ArrayList<Integer>> allsubsets = getSubsets(s);
System.out.println(allsubsets);
int[] nums = {1,2,3};
ArrayList<ArrayList<Integer>> subsets = subsets(nums);
System.out.println(subsets);

ArrayList<ArrayList<Integer>> anotherSubsets = anotherSubsets(nums);
System.out.println(anotherSubsets);
}

public static ArrayList<ArrayList<Integer>> anotherSubsets(int[] nums) {
if (nums == null) {
return null;
}
Arrays.sort(nums);
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
for (int i = 0; i < nums.length; i++) {
ArrayList<ArrayList<Integer>> temp = new ArrayList<>();
for (ArrayList<Integer> a : result) {
temp.add(new ArrayList<Integer>(a));
}
for (ArrayList<Integer> a : temp) {
a.add(nums[i]);
}

ArrayList<Integer> single = new ArrayList<Integer>();
single.add(nums[i]);
temp.add(single);
result.addAll(temp);
System.out.println(result);
}
result.add(new ArrayList<>());
return result;
}

public static ArrayList<ArrayList<Integer>> subsets(int[] nums) {
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
Arrays.sort(nums);
backTrack(list, new ArrayList<>(), nums, 0);
return list;
}

public static void backTrack(ArrayList<ArrayList<Integer>> list, ArrayList<Integer> tmpList, int[] nums, int start) {
list.add(new ArrayList<>(tmpList));
for (int i = start; i < nums.length; i++) {
tmpList.add(nums[i]);
backTrack(list, tmpList, nums, i + 1);
tmpList.remove(tmpList.size() - 1);
}
}

public static ArrayList<ArrayList<Integer>> getSubsets(ArrayList<Integer> subset) {
ArrayList<ArrayList<Integer>> sub = new ArrayList<>();
int m = 1 << subset.size();
for (int i = 0; i < m; i++) {
ArrayList<Integer> s = new ArrayList<>();
int k = i;
int index = 0;
while (k > 0) {
if ((k & 1) > 0) {
s.add(subset.get(index));
}
k >>= 1;
index ++;
}
sub.add(s);
}
return sub;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: