我正在找这个堆栈溢出问题用 Javascript 来回答。
因此,如果我的输入是“word”,该函数应该返回:
单词,
单词,
单词,
单词,
单词,
单词,
ETC..
这是我到目前为止所拥有的,但它只产生排列(不大写任何东西)
var perm = function(str){
var results = [];
var combos = function(reference, appendTo){
appendTo = appendTo || "";
if(reference.length === 0) {
results.push(appendTo);
}
for(var i = 0; i < reference.length; i++){
var current = reference.splice(i, 1);
combos(reference, appendTo+current);
reference.splice(i, 0, current)
}
}
combos(str.split(""));
return results;
}
perm("word");
一种选择是通过二进制逻辑生成大写排列。
作为下面代码片段的简单示例,请考虑下表,其中左列是当前排列的二进制表示,右列是结果大写:
0000 | word
1000 | Word
0100 | wOrd
1100 | WOrd
...
1111 | WORD
// Used to display the results
const write = (msg) => {
document.body.appendChild(document.createElement('div')).innerHTML = msg;
};
const input = "word";
const letters = input.split("");
const permCount = 1 << input.length;
for (let perm = 0; perm < permCount; perm++) {
// Update the capitalization depending on the current permutation
letters.reduce((perm, letter, i) => {
letters[i] = (perm & 1) ? letter.toUpperCase() : letter.toLowerCase();
return perm >> 1;
}, perm);
const result = letters.join("");
write(result);
}
请注意,从理论上讲,这种方法将一直有效Number.MAX_SAFE_INTEGER,最多输入长度为 52,但实际上您会遇到性能问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)