我的代码中有这样的东西来解决动态编程问题。
class Solution
{
static int dp[][] = new int[1000][1000];
static int someMethod(int a, int b) {
// use dp[][] somewhere here
// some recursion statements
someMethod(a-x,b-y);
}
}
我想用-1
而不是0
初始化dp
中的所有值。方法内部的标准初始化不是一个选项,因为它使用递归进行多次调用。
解决方案进入了一个在线判断工具,因此无法真正配置任何内容。任何纯代码解决方案都将不胜感激。
你说:
我想用-1而不是0初始化dp中的所有值。
调用一个static
方法,该方法创建、填充并返回所需的数组。
class Solution
{
static int[][] dp = Solution.makeArray() ;
static int[][] makeArray() {
int limit = 1_000 ;
int[][] a = new int[ limit ][ limit ] ;
for ( row = 0; row < limit ; row ++) {
for ( column = 0; column < limit ; column ++) {
a[ row ][ column ] = -1 ;
}
}
return a ;
}
}
class Solution
{
static int dp[][];
static {
dp = new int[1000][1000];
for (int[] row: dp) {
Arrays.fill(row, -1);
}
}
static int someMethod(int a, int b) {
// use dp[][] somewhere here
// some recursion statements
someMethod(a-x,b-y);
}
}
如果需要使用递归来实现这一点,可以按如下方式执行:我为了演示目的而减小了数组的大小。但是对于1000 x 1000阵列,除非修改JVM参数,否则可能会得到StackOverflow
。使用Eclipse时,我必须通过java -Xss28m
命令将堆栈大小设置为28兆字节。
import java.util.Arrays;
class Solution {
static int dp[][] = new int[10][10];
public static void main(String[] arg) {
someMethod(0, 0);
for (int[] row : dp) {
System.out.println(Arrays.toString(row));
}
}
打印
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
方法
static void someMethod(int a, int b) {
if (b < dp[0].length - 1) {
someMethod(a, b + 1);
} else if (a < dp.length - 1) {
someMethod(a + 1, 0);
}
dp[a][b] = -1;
}
}