Использование массива Java 2D int дает TLE, в то время как использование массива Integer 2D принимается. Зачем? - PullRequest
0 голосов
/ 21 июня 2020

Я решал размен монеты 2 на leetcode. Я написал код, как показано ниже, с использованием массива int 2D, что дает TLE:

class Solution {
    public int change(int amount, int[] coins, int tillIndex, int [][]ways){
        if(amount==0){
            return 1;
        }
        if(amount<0){
            return 0;
        }
        if(coins.length==0){
            return 0;
        }
        if(ways[tillIndex][amount] > 0){
            return ways[amount][tillIndex];
        }
        if(tillIndex == coins.length && amount > 0){
            return 0;
        }
        
        //include + exclude
        ways[tillIndex][amount]= change(amount-coins[tillIndex], coins, tillIndex, ways) + 
                                 change(amount, coins, tillIndex+1, ways);
        return ways[tillIndex][amount];
    }
    public int change(int amount, int[] coins) {
        int [][]ways= new int[coins.length+1][amount+1];
        return change(amount, coins, 0, ways);
    }
}

Но , когда я использую целочисленный 2D-массив вместо int 2D-массива, как показано ниже, его принимают:

class Solution {
    public int change(int amount, int[] coins, int tillIndex, Integer [][]ways){
        if(amount==0){
            return 1;
        }
        if(amount<0){
            return 0;
        }
        if(coins.length==0){
            return 0;
        }
        if(ways[amount][tillIndex] != null){
            return ways[amount][tillIndex];
        }
        if(tillIndex == coins.length && amount > 0){
            return 0;
        }
        
        //include + exclude
        ways[amount][tillIndex]= change(amount-coins[tillIndex], coins, tillIndex, ways) + 
                                 change(amount, coins, tillIndex+1, ways);
        return ways[amount][tillIndex];
    }
    public int change(int amount, int[] coins) {
        Integer [][]ways= new Integer[amount+1][coins.length+1];
        return change(amount, coins, 0, ways);
    }
}

Я знаю, что Java передается по значению, а переданный массив обрабатывается как объект. Тогда в чем проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...