首页 > 代码库 > LeetCode OJ - Subsets 1 && 2
LeetCode OJ - Subsets 1 && 2
这道题的做法,一定得掌握啊!!! elegant & beautiful & concise
下面是AC代码:
1 /** 2 * Given a set of distinct integers, S, return all possible subsets. 3 * 这道题的做法应该要记住!!!!! 4 * @param s 5 * @return 6 */ 7 public ArrayList<ArrayList<Integer>> subsets(int[] s){ 8 ArrayList<ArrayList<Integer>> r = new ArrayList<ArrayList<Integer>>(); 9 Arrays.sort(s); 10 ArrayList<Integer> sub = new ArrayList<Integer>(); 11 r.add(sub); 12 for(int e : s){ 13 int cur_size = r.size(); 14 for(int j=0;j<cur_size;j++){ 15 sub = new ArrayList<Integer>(); 16 sub.addAll(r.get(j)); 17 sub.add(e); 18 r.add(sub); 19 } 20 } 21 return r; 22 } 23 /** 24 * Given a collection of integers that might contain duplicates, S, return all possible subsets. 25 * @param num 26 * @return 27 */ 28 public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] num) { 29 ArrayList<ArrayList<Integer>> r = new ArrayList<ArrayList<Integer>>(); 30 Arrays.sort(num); 31 int last = Integer.MAX_VALUE; 32 int mark = 0; 33 ArrayList<Integer> sub = new ArrayList<Integer>(); 34 r.add(sub); 35 for(int e:num){ 36 int cur_size = r.size(); 37 int begin = e==last? mark:0; 38 for(int i = begin;i<cur_size;i++){ 39 sub = new ArrayList<Integer>(); 40 sub.addAll(r.get(i)); 41 sub.add(e); 42 r.add(sub); 43 } 44 last = e; 45 mark = cur_size; 46 } 47 return r; 48 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。