[leetcode]78. Subsets(Java)

来源:互联网 发布:北京海量数据离职 编辑:程序博客网 时间:2024/05/18 02:41

https://leetcode.com/problems/subsets/#/description


Given a set of distinct integers, nums, return all possible subsets.

Note: The solution set must not contain duplicate subsets.

For example,
If nums = [1,2,3], a solution is:

[  [3],  [1],  [2],  [1,2,3],  [1,3],  [2,3],  [1,2],  []]



package go.jacob.day629;import java.util.ArrayList;import java.util.List;public class Demo3 {/* * Runtime: 2 ms.Your runtime beats 30.58 % of java submissions. * 牛客网和leetcode的区别是是否对结果进行排序 */public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> res = new ArrayList<List<Integer>>();if (nums == null || nums.length < 1)return res;ArrayList<Integer> list = new ArrayList<Integer>();find(res, nums, list, 0);return res;}private void find(List<List<Integer>> res, int[] nums, ArrayList<Integer> list, int start) {res.add(new ArrayList<Integer>(list));if (start >= nums.length)return;for (int i = start; i < nums.length; i++) {list.add(nums[i]);find(res, nums, list, i + 1);list.remove(list.size() - 1);}}}

再贴一个牛客网运行通过的。除了需要自定义比较器,其他解法相同

https://www.nowcoder.com/questionTerminal/c333d551eb6243e0b4d92e37a06fbfc9

package go.jacob.day629;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;/** * @author Jacob */public class Demo4 {/* * Runtime: 2 ms.Your runtime beats 30.58 % of java submissions. * 该题和leetcode的区别是是否对结果进行排序 */public ArrayList<ArrayList<Integer>> subsets(int[] nums) {ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();if (nums == null || nums.length < 1)return res;Arrays.sort(nums);ArrayList<Integer> list = new ArrayList<Integer>();find(res, nums, list, 0);// 对结果进行排序,自定义比较器Collections.sort(res, new Comparator<ArrayList<Integer>>() {@Overridepublic int compare(ArrayList<Integer> o1, ArrayList<Integer> o2) {int size1 = o1.size(), size2 = o2.size();if (size1 != size2)return size1 - size2;else {for (int i = 0; i < o1.size(); i++) {if (o1.get(i) == o2.get(i))continue;elsereturn o1.get(i) - o2.get(i);}}return 0;}});return res;}private void find(ArrayList<ArrayList<Integer>> res, int[] nums, ArrayList<Integer> list, int start) {res.add(new ArrayList<Integer>(list));if (start >= nums.length)return;for (int i = start; i < nums.length; i++) {list.add(nums[i]);find(res, nums, list, i + 1);list.remove(list.size() - 1);}}}




原创粉丝点击