【发布时间】:2021-10-16 02:03:26
【问题描述】:
我正在学习动态编程,我刚开始处理一些简单的问题。我正在做一个网格旅行者问题,你从网格的左上角开始,你只能向左或向下移动。您需要返回从网格的左上角到右下角的唯一路径的数量。
当我尝试一些更大的网格时,我得到了一些奇怪的返回值。例如,当我尝试 (18,18) 时,它转到 -> -1961361076 而不是 2333606220
谁能看出我的代码有问题?
'''
import java.util.HashMap;
public class Test{
public static void main(String[] args){
HashMap<String, Integer> memo = new HashMap<>();
System.out.println(gridTraveler(2,2,memo));
System.out.println(gridTraveler(18,18,memo));
}
public static int gridTraveler(int m, int n, HashMap<String, Integer> memo){
String key = "" + m + "," + n;
//base case
if(m == 1 || n == 1)
return 1;
//base case
if(m == 0 || n == 0)
return 0;
if (memo.containsKey(key))
return memo.get(key);
//Set value of the key memo[key]
memo.put(key, gridTraveler(m-1, n, memo) + gridTraveler(m, n-1, memo));
return memo.get(key);
}
}
【问题讨论】:
-
你只能向左或向下移动 - 你的意思是向右还是向下?如果是这样,请edit 并更改它
-
-1961361076可能意味着您得到的值大于 In Integer.MAX_VALUE (即 2147483647)。使用双倍。 -
c0der的回答正确,请关闭问题
标签: java memoization