招行卡第二题求大佬指点思路一波

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;
    }
}

#招商银行信用卡中心##笔试题目#
全部评论
春招还是实习?
点赞 回复 分享
发布于 2020-04-08 21:40

相关推荐

04-18 15:58
已编辑
门头沟学院 设计
kaoyu:这一看就不是计算机的,怎么还有个排斥洗碗?
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务