gpt4 book ai didi

Java - 矩阵中不同组合的总和列表

转载 作者:行者123 更新时间:2023-12-02 04:29:49 27 4
gpt4 key购买 nike

假设我有一个像这样的矩阵

|1,2,3|
|4,5,6|
|7,8,9|

我想要一个不同组合的总和列表,例如 12(1+4+7)、13(1+4+8) 等,直到我拥有所有 27 种组合。除了使用数组和 for 循环之外,实现此目的的最佳方法是什么。我正在研究 Google Guava 的 Table 界面,但不确定这是否是最好的方法。

不同的组合 - 从上面的矩阵我生成不同的组合,如 (1,4,7),(1,4,8),(1,4,9),(1,5,7),(1, 5,8),(1,5,9),(1,6,7),(1,6,8),(1,6,9),(2,4,7),(2,4, 8) 依此类推,直到得到所有 27 个组合,然后将每个组合内的值相加。

最佳答案

您可以使用递归。我还没有测试下面的代码,但它应该可以解决问题。

//make this an instance field that the function sum() can access
ArrayList<Integer> matrixSums = new ArrayList<Integer>();

//call this line to put all the sums into matrixSums
getSums(matrix);

//helper function for the recursion (gets it started)
public void getSums(int[][] array)
{
boolean[][] visited = new boolean[array.length][array[0].length];
ArrayList<Integer> answer = new ArrayList<Integer>();

for (int i = 0; i < array.length; i++)
{
for (int j = 0; j < array[i].length; j++)
{
visited[i][j] = true;
sum(array, visited, 0, 0);
visited[i][j] = false;
}
}

return answer;
}

//does the actual recursion/math
public void sum(int[][] array, boolean[][] visited, int numVisited, int currentSum)
{
//base case
if (numVisited == 3)
{
matrixSums.add(currentSum);
return;
}

//calculate sums
for (int i = 0; i < array.length; i++)
{
for (int j = 0; j < array[i].length; j++)
{
if (!visited[i][j])
{
visited[i][j] = true;
sum(array, visited, numVisited + 1, currentSum + array[i][j]);
visited[i][j] = false;
}
}
}
}

关于Java - 矩阵中不同组合的总和列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31617565/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com