哔哩哔哩8月13日后端笔试题

## 第一题 24点
回溯算法,写得有点丧心病狂。。。
public class Solution {
    boolean ans = false;
    public boolean Game24Points(int[] arr) {
        backtrack(arr, 24, new HashSet<>());
        return ans;
    }

    private boolean backtrack(int[] arr, double num, Set<Integer> path) {
        if (num == 0) {
            ans = true;
            return true;
        }

        for (int i = 0; i < arr.length - 1; i++) {
            if (path.contains(i)) continue;
            for (int j = i + 1; j < arr.length; j++) {
                if (path.contains(j)) continue;

                path.add(i);
                path.add(j);

                if (backtrack(arr, num - (arr[i] + arr[j]), path)) return true;
                else if (backtrack(arr, num / (arr[i] + arr[j]), path)) return true;


                else if (backtrack(arr, num - (arr[i] - arr[j]), path)) return true;
                else if (backtrack(arr, num / (arr[i] - arr[j]), path)) return true;


                else if (backtrack(arr, num - (arr[j] - arr[i]), path)) return true;
                else if (backtrack(arr, num / (arr[j] - arr[i]), path)) return true;


                else if (backtrack(arr, num - (arr[i] * arr[j]), path)) return true;
                else if (backtrack(arr, num / (arr[i] * arr[j]), path)) return true;


                else if (backtrack(arr, num - ((double) arr[i] / arr[j]), path)) return true;
                else if (backtrack(arr, num / ((double) arr[i] / arr[j]), path)) return true;

                else if (backtrack(arr, num - ((double) arr[j] / arr[i]), path)) return true;
                else if (backtrack(arr, num / ((double) arr[j] / arr[i]), path)) return true;

                path.remove(i);
                path.remove(j);

            }
        }

        return false;
    }
}
## 第二题 验证括号有效性
public class Solution {

    public static boolean IsValidExp(String s) {
        if (s == null || s.length() == 0) return true;
        if ((s.length() & 1) == 1) return false;

        Stack<Character> stack = new Stack<>();

        for (char ch : s.toCharArray()) {
            if (ch == '(') stack.push(')');
            else if (ch == '[') stack.push(']');
            else if (ch == '{') stack.push('}');
            else {
                if (stack.pop() != ch) return false;
            }
        }

        return stack.isEmpty();
    }
}
## 第三题 零钱兑换问题
使用动态规划即可
public class Main {
    public static int GetCoinCount(int N) {
        int amount = 1024 - N;
        int[] coins = {1, 4, 16, 64};

        int[] dp = new int[amount + 1];
        Arrays.fill(dp, amount + 1);
        dp[0] = 0;

        for (int i = 0; i <= amount; i++) {
            for (int coin : coins) {
                if (coin <= i) dp[i] = dp[i - coin] + 1;
            }
        }

        return dp[amount];
    }
}

#笔经##哔哩哔哩#
全部评论
第一题不会做 return true; ac57%😂
2 回复
分享
发布于 2020-08-13 20:37
楼主你好,请问你是什么岗位?开发的话,是Java方向还是C++方向?或者其他语言方向~
点赞 回复
分享
发布于 2020-08-13 20:06
联想
校招火热招聘中
官网直投
菜鸡哭辽😥
点赞 回复
分享
发布于 2020-08-13 20:17
选择是一塌糊涂 本来准备看看面试的
点赞 回复
分享
发布于 2020-08-13 20:35
最后两个就是白给
点赞 回复
分享
发布于 2020-08-13 20:48
第一题疯狂switch的我
点赞 回复
分享
发布于 2020-08-13 22:13
都是原题可还行
点赞 回复
分享
发布于 2020-08-13 22:21

相关推荐

头像
不愿透露姓名的神秘牛友
03-13 10:56
点赞 评论 收藏
转发
2 6 评论
分享
牛客网
牛客企业服务