招商银行4/8第二题

首先测试样例的确给的挺坑的,第一位前面不能加符号,每两位数字间可以加符号或者不加,很多人0%的应该就是这问题
Java写的,回溯法,用一个数组来存每一位前面加符号的状态,再记下当前到第几位了。
把所有加符号状态都遍历出来(其实就是暴力),到最后一位的时候,也就是得到一种完整情况后,就去计算当前这一加符号状态得到的结果。
public class Problem2 {

    static int ans;
    static String str;
    static int tar;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        while(T-->0) {
            str = sc.next();
            tar = sc.nextInt();
            ans = 0;
            recur(new int[str.length()], 1);
//            System.out.println("ans:" + ans);
            System.out.println(ans);
        }

    }

    private static void recur(int[] op, int pos) {
        if(pos == str.length()) {
            if(tar == checkOp(op)) {
                ans++;
            }
            return;
        }

        for(int i = 1; i <= 3; i++) {
            op[pos] = i;
            recur(op, pos+1);
            op[pos] = 0;
        }
        return;
    }

    /*
    1不操作
    2加好
    3减号
     */
    private static int checkOp(int[] op) {
//        if(op[0] != 1)
//            return tar-1;

        StringBuilder sb = new StringBuilder();
        sb.append(str.charAt(0));
        for (int i = 1; i < op.length; i++) {
            if(op[i] == 1) {
                sb.append(str.charAt(i));
            } else if( op[i] == 2) {
                sb.append('+').append(str.charAt(i));
            } else if( op[i] == 3) {
                sb.append('-').append(str.charAt(i));
            }
        }
        String s = sb.toString();

        int sum = 0;
        int *** = 1;
        for(int i = 0; i < s.length(); i++) {
            if(s.charAt(i)=='+') {
                *** = 1;
            } else if(s.charAt(i) == '-') {
                *** = -1;
            } else{
                int cur = 0;
                int x = i;
                while(x < s.length() && s.charAt(x) != '+' && s.charAt(x) != '-') {
                    cur = cur*10 + (s.charAt(x) - '0' );
                    x++;
                }
                sum += cur****;
                i = x-1;
            }
        }
//        System.out.println(s + "=" + sum);
        return sum;
    }


}
菜鸡第一次AC两题,发个帖嘚瑟一下/cy

#招商银行##笔试题目#
全部评论
你好,你的代码思路不错哦,不过我觉得可以改进的小地方是路径数组的大小可以为字符串的长度-1,例如12345,那么路径数组大小为4,默认不在第一个位置插入符号。
点赞 回复 分享
发布于 2020-04-10 16:49

相关推荐

点赞 评论 收藏
分享
11-27 12:43
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
评论
1
5
分享
牛客网
牛客企业服务