大小任意时写入数组组合

Writing array combinations when sizes are arbitrary

考虑以下输入:

[
  // all inner arrays have the same size
  ["en","play","checkers"]
  ["pt","jogar","damas"]
]

同时考虑以下输出:

en/play/checkers
en/play/damas
en/jogar/checkers
en/jogar/damas
pt/play/checkers
pt/play/datas
pt/jogar/checkers
pt/jogar/damas

这意味着我组合了两个数组并生成了多个字符串。如果将输入视为矩阵,您会注意到不同列之间永远不会进行组合(例如 /en/chess/play)。那是列限制。

当我们知道数组的数量 (2) 和它们的大小 (3) 时,算法将类似于:

for i=0 ; i<3; i++
  for j=0; j<3; j++
    for k=0; k<3; k++
       matrix[i][j][k]

问:但是如何编写适用于任意固定大小 (K) 的任意数量数组 (N) 的算法?

如果你先转置输入会更容易:

[
 ["en", "pt"],
 ["play", "jogar"],
 ["checkers", "damas"],
]

现在你可以写一个递归函数给定这个二维数组:

a) 遍历最后一个数组的每个值,将其作为参数附加到字符串数组

b) 用从二维数组中移除的最后一个数组调用自身

c) 基本情况是如果数组为空,则 return 字符串数组。