题目大致意思是给出给出一个数组,在数组中选择k个数,和是素数的情况有多少。
private List<List<Integer>> res;
public int getWays(int[] a, int k) {
// Write your code here
res = new ArrayList<List<Integer>>();
if (a.length == 0 || k <= 0 || k > a.length)
return 0;
LinkedList<Integer> c = new LinkedList<Integer>();
generateCombinations(a.length, k, 1, c);
int ans = 0;
for (List<Integer> list : res) {
int sum = 0;
for (int j = 0; j < list.size(); j++) {
sum += a[list.get(j) - 1];
}
if (check(sum)) {
ans++;
}
}
return ans;
}
private boolean check(int a) {
if (a < 2) {
return false;
}
boolean ean = true;
for (int i = 2; i <= Math.sqrt(a); i++) {
if (a % i == 0) {
ean = false;
break;
}
}
return ean;
}
private void generateCombinations(int n, int k, int start, LinkedList<Integer> c) {
if (c.size() == k) {
res.add((List<Integer>) c.clone());
return;
}
for (int i = start; i <= n - (k - c.size()) + 1; i++) {
c.addLast(i);
generateCombinations(n, k, i + 1, c);
c.removeLast();
}
}