招行卡第二题求大佬指点思路一波
package coding_test;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Zhaoyin2 {
public static void main(String[] args) {
//给定一个String,可以添加加减号,使得该Stringd的值等于k,求方案又多少中
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
scanner.nextLine();
Map<String,String> map = new HashMap<>();
int index = 0;
while(index < num){
String key = scanner.nextLine();
String value = scanner.nextLine();
map.put(key,value);
index++;
}
for(String key: map.keySet()){
System.out.println(countNumber(key,Integer.valueOf(map.get(key))));
}
}
public static int countNumber(String target,int num){
char[] charArr = target.toCharArray();
int [] intArr = new int[target.length()];
for(int i = 0 ; i < target.length() ; i++){
intArr[i] = charArr[i]-48;
}
int [][] dpArr = new int[target.length()][(int)Math.pow(2,target.length()-1)];
dpArr[0][0] = intArr[0];
for(int i = 1 ; i < target.length();i++){
for(int j = 0 ; j < 2*i;){
for(int k = 0; k < (int)Math.pow(2,(i-1));k++){
dpArr[i][j++] = dpArr[i-1][k]+intArr[i];
dpArr[i][j++] = dpArr[i-1][k]-intArr[i];
}
}
}
int count = 0 ;
for(int i = 0 ; i < (int)Math.pow(2,target.length()-1);i++){
if(dpArr[target.length()-1][i] == num){
count++;
}
}
return count;
}
}
#招商银行信用卡中心##笔试题目#

查看3道真题和解析