Я решал размен монеты 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 передается по значению, а переданный массив обрабатывается как объект. Тогда в чем проблема?