【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; } }
相关文章推荐
- javaweb学习总结(三十一)——国际化(i18n)
- 【Java】两个集合取交集
- Java并发编程-并发编程知识点总结
- 1.5、Eclipse中使用Git
- Java高精度
- Java Struts2 POI创建Excel文件并实现文件下载
- JavaWeb学习笔记之图解Struts和SpringMVC区别
- JAVA学习总结十六
- 梳理java基础小框架篇-Javassist
- 梳理spring-总结篇
- Java排序算法总结
- 通过代码入门Spring②何为AOP
- Javaweb学习笔记之Spring的依赖注入方式
- Java并发编程-Fork/Join框架同步与异常
- java并发编程-- 并发编程大合集
- SpringMVC基于Controller的注解
- JavaWeb学习笔记之Spring中bean的作用域
- Java虚拟机(三):内存分配与回收策略
- spring源码解析(一)---占位符解析替换
- 回文数判断