把數組分成m組,每組不能有重複元素,共可分多少組?
筆試結束兩分鐘後得到正確答案,太遺憾了。
import java.util.*;
public class Main {
/*請完成下面這個函數,實現題目要求的功能
當然,你也可以不按照下面這個模板來作答,完全按照自己的想法來 ^-^
******************************開始寫代碼******************************/
public static int res = 0;
public static int staticM;
static int calc(int[] nums, int m) {
int[] tmp = new int[staticM];
helper(nums, 0, tmp, 0, staticM);
return res;
}
static void helper(int[] nums, int start, int[] tmp, int level, int m) {
int len = nums.length - start;
// 第一位和的個數
for (int count = len+1-m; count >= 1; count--) {
// 終止條件
if (level == staticM-1) {
System.out.println();
if (check(tmp) && ((start+count-1) == nums.length-1)) {
res++;
}
return;
}
int sum = calSum(nums, start, start+count-1);
tmp[level] = sum;
helper(nums, start+count, tmp, level+1, m-1);
}
}
static int calSum(int[] num, int start, int end) {
int sum = 0;
for (int i = start; i <= end; i++) {
sum += num[i];
}
return sum;
}
static boolean check(int[] res) {
Set<Integer> set = new HashSet<>();
for (Integer num : res) {
if (set.contains(num)) {
return false;
} else {
set.add(num);
}
}
return true;
}
/******************************結束寫代碼******************************/
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int res;
int _nums_size = 0;
_nums_size = Integer.parseInt(in.nextLine().trim());
int[] _nums = new int[_nums_size];
int _nums_item;
for(int _nums_i = 0; _nums_i < _nums_size; _nums_i++) {
_nums_item = Integer.parseInt(in.nextLine().trim());
_nums[_nums_i] = _nums_item;
}
int _m;
_m = Integer.parseInt(in.nextLine().trim());
staticM = _m;
res = calc(_nums, _m);
System.out.println(String.valueOf(res));
}
}