如何从给定的字符数组中查找所有单词的列表

时间:2019-04-06 08:02:45

标签: javascript arrays algorithm data-structures

我正在尝试解决5个字母的单词难题,其中可以包含3个,4个和5个字母的单词。我应该如何编写算法来实现这一目标?

我尝试制作5个嵌套循环以遍历数组的字符,然后添加所有循环,它适用于小单词,但由于时间复杂而崩溃。

const addandlog = (array) => {
  for (var i = 0; i < array.length; i++) {
    for (var j = 0; j < array.length; j++) {
      for (var k = 0; i < array.length; k++) {

        console.log(array[i] + array[j] + array[k]);

      }
    }
  }
}
addandlog(['A', 'G', 'R', 'N', 'D']);

我希望输出的是所有可以制作的单词,而不仅仅是字典单词

1 个答案:

答案 0 :(得分:2)

您可以采用迭代方法,将需要的项组成一个数组。

int insert_asc(node **phead, int data) {
    node *cur;
    node *newnode = malloc(sizeof(node));
    if (newnode == NULL)
        return 0;
    newnode->data = data;

    cur = *phead;
    if (cur == NULL || cur->next == NULL) {
       newnode->next = cur;
       *phead = newnode;
    } else {
        while (cur->next != NULL && data < cur->next->data)
            cur = cur->next;
        newnode->next = cur->next;
        cur->next = newnode;
    }
    return 1;
}
function getWords(letters, length) {
    return Array
        .from({ length })
        .fill(letters)
        .reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []))
        .map(a => a.join(''))
}

console.log(getWords(['A', 'G', 'R', 'N', 'D'], 5));