大小任意时写入数组组合
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 字符串数组。
考虑以下输入:
[
// 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 字符串数组。