arrays - 递归爬升ArrayList
问题描述
我目前正在为朋友制作一个程序。他给了我一个 csv 文件,它输出深度为 3 的所有组合。如果用户要给出他们想要的深度,我将如何使这部分递归。
List<BigDecimal> csvOut;
for (int i = 0; i < records.size(); i++)
{
for (int j = i + 1; j < records.size(); j++)
{
csvOut = new ArrayList<>();
csvOut.add(records.get(i));
csvOut.add(records.get(j));
csvOut.add(records.get(i).add(records.get(j)));
System.out.println(csvOut);
writeToCSV(csvOut, csvWriter);
for (int k = j + 1; k < records.size(); k++)
{
csvOut = new ArrayList<>();
csvOut.add(records.get(i));
csvOut.add(records.get(j));
csvOut.add(records.get(k));
csvOut.add(records.get(i).add(records.get(j).add(records.get(k))));
System.out.println(csvOut);
writeToCSV(csvOut, csvWriter);
}
}
}
解决方案
这是一些生成索引组合的python代码;将其视为您想要的伪代码:
size = 7
def combos( indices, m ):
if m+1 < len(indices):
for j in range(indices[m]+1, size):
indices[m+1] = j
print(indices[:m+2])
combos(indices, m+1)
for i in range(size):
combos( [i,0,0], 0 )
这将打印:
[0, 1]
[0, 1, 2]
[0, 1, 3]
[0, 1, 4]
[0, 1, 5]
[0, 1, 6]
[0, 2]
[0, 2, 3]
[0, 2, 4]
[0, 2, 5]
[0, 2, 6]
[0, 3]
[0, 3, 4]
[0, 3, 5]
[0, 3, 6]
[0, 4]
[0, 4, 5]
[0, 4, 6]
[0, 5]
[0, 5, 6]
[0, 6]
[1, 2]
[1, 2, 3]
[1, 2, 4]
[1, 2, 5]
[1, 2, 6]
[1, 3]
[1, 3, 4]
[1, 3, 5]
[1, 3, 6]
[1, 4]
[1, 4, 5]
[1, 4, 6]
[1, 5]
[1, 5, 6]
[1, 6]
[2, 3]
[2, 3, 4]
[2, 3, 5]
[2, 3, 6]
[2, 4]
[2, 4, 5]
[2, 4, 6]
[2, 5]
[2, 5, 6]
[2, 6]
[3, 4]
[3, 4, 5]
[3, 4, 6]
[3, 5]
[3, 5, 6]
[3, 6]
[4, 5]
[4, 5, 6]
[4, 6]
[5, 6]
推荐阅读
- java - 在 WSO API Manager 2.6.0 中单独更新 Apache POI
- unity3d - 在我的相机进入房间之前,如何在 2D 游戏中以设定的视口位置实例化敌人?(或替代解决方案!)
- python - 自动解析测试报告
- c++ - 如何让 GCC (C++) 停止简化算术表达式?
- javascript - FabricJS 固定大小 TextBox 与动态 fontsIze (缩小文本以适应大小)
- python - 如何将 1D numpy 数组添加到 2D numpy 数组的第一列?
- android - Android渐变背景看起来带状,类似问题中建议的所有方法都不起作用
- python - 模拟并将特定行存储到数据框中
- ruby - 如何使用 Ruby Metapraogramming 使链式点表示法适用于嵌套哈希键
- scala - 为什么这个迭代器无限循环?