网易笔试第三题
本地跑可以通过,为何提交时一直说数组非法访问之类的。
题目是幸运袋子那题。
以下是代码:
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; /** * Created by wanghongxiang on 16/8/6. */ public class LuckyPack { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int N = sc.nextInt(); int[] arr = new int[N]; for (int i = 0; i < N; i++) { arr[i] = sc.nextInt(); } ArrayList<ArrayList<Integer>> res = subsetsWithDup(arr); int count = 0; for (ArrayList<Integer> s : res) { System.out.println(s); if (isLucky(s)) count++; } System.out.println(count); } } public static boolean isLucky(List<Integer> rs) { if(rs.size() ==0 || rs == null) return false; int sum = 0; int accum = 1; for (int i = 0; i < rs.size(); i++) { sum += rs.get(i); accum *= rs.get(i); } return sum > accum; } public static ArrayList<ArrayList<Integer>> subsetsWithDup(int[] num) { ArrayList<ArrayList<Integer>> results = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> result = new ArrayList<Integer>(); Arrays.sort(num); dfs(num, 0, result, results); return results; } private static void dfs(int[] num, int step, ArrayList<Integer> result, ArrayList<ArrayList<Integer>> results) { if (!results.contains(result)) results.add(new ArrayList<Integer>(result)); for (int i = step; i < num.length; i++) { result.add(num[i]); dfs(num, i + 1, result, results); result.remove(result.size() - 1); } } }