2022年9月3日京东后端开发第二题 --- 分裂数字

图片说明

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n  = in.nextInt();
        int max = Integer.MIN_VALUE;
        int[] ans = new int[n];
        for(int i = 0; i<n; i++){
            ans[i] = in.nextInt();
            max = Math.max(max, ans[i]);
        }
        int[] dp = new int[max+1];
        int sum = 0;
        for(int i=0; i < n; i++){
            sum += dfs(ans[i], dp);
        }
        System.out.println(sum);
    }
    public static int dfs(int num, int[] dp){
        if(num == 1)      return  0;
        if(dp[num] != 0)  return dp[num];
        int mid = isPrime(num);
        if(mid == -1){
            dp[num] = dfs(num - 1, dp) + 1;
        }else{
            int left  = dfs(mid, dp);
            int right = dfs(num / mid, dp);
            dp[num] = left + right + 1;
        }
        return dp[num];
    }
    public static  int isPrime(int a){
        int mid = (int)Math.sqrt(a);
        for(int i = mid; i >= 2; i--){
            if(a % i  == 0){
                return  i;
            }
        }
        return  -1;
    }

代码提交一直是 0%, 小弟斗胆请问一下各位大佬,到底错在哪里了呢?

#京东笔试##java后端开发#
全部评论
g
1 回复 分享
发布于 2022-09-03 20:52 吉林
哥们,我也是这个题,我用了20几个测试用例都通过了,提交就是0%,就离谱的一批!
1 回复 分享
发布于 2022-09-03 20:58 上海
c++通过一半,超时
1 回复 分享
发布于 2022-09-03 21:00 浙江
我们方法差不多,我也是测试没问题提交就是0
点赞 回复 分享
发布于 2022-09-03 20:58 广东
我也是,咋自己测试都是对的,就是通过0%通过
点赞 回复 分享
发布于 2022-09-03 21:00 山东
哥这是真的搞人心态,全是0%
点赞 回复 分享
发布于 2022-09-03 21:00 湖北
我也和你差不多,应该是合成数遇到第一个因子就直接返回了,要从全部因子里找最小的
点赞 回复 分享
发布于 2022-09-03 22:18 广东

相关推荐

评论
点赞
2
分享
牛客网
牛客企业服务