【问题标题】:Writing array combinations when sizes are arbitrary任意大小时写入数组组合
【发布时间】:2021-07-29 06:22:32
【问题描述】:

考虑以下输入:

[
  // 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]

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

【问题讨论】:

  • 使用递归。我可能会向您展示我的意思的示例,但没有给出数据类型,甚至没有提到编程语言。
  • 因为不是特定的语言问题。
  • 确实如此,所以我之前的建议就足够了。
  • 感谢您的单字建议 :)
  • 我会说它是每个单词选择的笛卡尔积。

标签: arrays algorithm combinations permutation


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-16
    • 2017-10-09
    • 1970-01-01
    • 2015-09-21
    • 2016-08-29
    • 2016-11-11
    • 2020-03-20
    • 1970-01-01
    相关资源
    最近更新 更多