如何在Java中初始化静态数组变量数组



我的代码中有这样的东西来解决动态编程问题。

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;
}
}

最新更新