我一直在研究一个可以描述如下的问题。
系统会为您提供3个字符列表。
L1 = [a,b,c,d]
L2 = [e,f,g,a]
L3 = [m,n,o,g,k]
通过从每个列表中选取一个字符,您可以制作多少个字符串?
您只能从每个列表中选择一个字符(字符串的长度应为3)。结果字符串不应包含任何重复的字符。每个列表都保证包含唯一的字母。您从中选择的列表顺序无关紧要。
答案 0 :(得分:1)
您可以创建Cartesian product of multiple arrays,然后通过计算集合中的唯一项来过滤数组。
var data = [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'a'], ['m', 'n', 'o', 'g', 'k']],
result = data
.reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []))
.filter(a => new Set(a).size === a.length);
console.log(result.map(a => a.join(' ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }