题解 | #数组分组#
数组分组
https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86
import java.util.Scanner; import java.util.List; import java.util.ArrayList; public class Main { private static boolean result = false; private static int sum = 0; public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int sumA = 0; List<Integer> nums = new ArrayList<>(); // 设全部数字的和为sum // 设左边数组的数字和为sumA,输入数据的时候顺便将5的倍数都计入sumA; // 只有非5的倍数会加到列表nums中 for (int i = 0; i < n; i++) { int num = in.nextInt(); sum += num; if (num % 5 == 0) { sumA += num; } else { nums.add(num); } } check(nums, 0, sumA); System.out.println(result); } private static void check(List<Integer> nums, int idx, int sumA) { // 若result为true,则不需要继续递归了(剪枝) // 若所有数字和为左边数组的和的两倍,则符合条件,将结果result设为true if (result || sum == sumA * 2) { result = true; return; } if (idx == nums.size()) { return; } // 当前数字不加入左边数组的情况 check(nums, idx + 1, sumA); // 当前数字不为3的倍数,加入左边数组的情况 if (nums.get(idx) % 3 != 0) { check(nums, idx + 1, sumA + nums.get(idx)); } } }