n2d数组中的java搜索
帮助了解如何在n个二维数组上执行搜索。更具体地说: 如果我有6张表,我把它们放到一个二维数组中。我将提供一个值,比如说10,就像这里的val=0。我需要从这些表中搜索组成10的所有组合值。将从这些表中计算所有值
public static int Main() {
int[] a = {2,1,4,7};
int[] b = {3,-3,-8,0};
int[] c = {-1,-4,-7,6};
int sum;
int i; int j; int k;
int val = 0;
for(i = 0; i < 4; i++) {
for(j = 0;j<4;j++) {
for(k = 0;k<4;k++) {
sum = a[i]* b[j]* c[k];
if(sum == val)
System.out.printf("%d %d %d\n",a[i],b[j],c[k]);
}
}
}
}
# 1 楼答案
以下是您需要的代码:
(解决方案包括使问题更容易解决的递归)
您需要实现一个类(“表”作为我的解决方案)写入方法:
布尔isLast(int tableNo):检查给定表是否是表列表中的最后一个表
int[][]Get(int tableNo):获取具有指定索引的表
方法sum也应该对numbers数组列表中的值求和。 PrintNumbers方法应将numbers ArrayList中的数字打印成一行。 checkValue是要检查的值
希望这有帮助
如果您想对该算法进行任何澄清,请写信
# 2 楼答案
可以将表视为值列表。然后,如果您有N个表,您的问题是查找N个整数的列表(每个整数取自N个表中的一个),其乘积等于值p。您可以递归地解决此问题:
{t1, t2, t3, ...}
p
t1
中的每个值v
,您必须使用乘积值p / v
和表{t2, t3, ...}
寻找子问题的解决方案(这假设p % v == 0
,因为我们处理的是整数)下面是一些java代码:
该代码将打印示例稍微修改过的版本的解决方案:
这些解决方案适用于任意数量的表。有一些方法可以改进算法,例如使用记忆和动态规划。但我认为递归解决方案更清晰