问题描述
小M面对一组从 1 到 9 的数字,这些数字被分成多个小组,并从每个小组中选择一个数字组成一个新的数。目标是使得这个新数的各位数字之和为偶数。任务是计算出有多少种不同的分组和选择方法可以达到这一目标。
numbers
: 一个由多个整数字符串组成的列表,每个字符串可以视为一个数字组。小M需要从每个数字组中选择一个数字。
例如对于[123, 456, 789]
,14个符合条件的数为:147 149 158 167 169 248 257 259 268 347 349 358 367 369
。
测试样例
样例1:
输入:
numbers = [123, 456, 789]
输出:14
样例2:
输入:
numbers = [123456789]
输出:4
样例3:
输入:
numbers = [14329, 7568]
输出:10
解法一:回溯法
public class Main {
static int[] numbers;
static int res;
public static int solution(int[] numbers) {
// Please write your code here
Main.numbers = numbers;
Main.res = 0;
dg(0,0);
return Main.res;
}
private static void dg(int index,int sum) {
if(index == numbers.length){
if((sum & 1) == 0) Main.res++;
return;
}
int temp = numbers[index];
while (temp != 0){
dg(index+1,temp % 10+sum);
temp /= 10;
}
}
public static void main(String[] args) {
// You can add more test cases here
System.out.println(solution(new int[]{123, 456, 789}) == 14);
System.out.println(solution(new int[]{123456789}) == 4);
System.out.println(solution(new int[]{14329, 7568}) == 10);
}
}