我有一个带有字节的字符串(“00001011”),现在我想得到一个数组,其中包含 1 个(事件)“位”的所有可能组合,也作为“字节串” 所以从
var bString = "00001011";//输出字符串
到一个包含所有字符串的数组,其中包含此“字节字符串”的所有可能组合,例如 - “00000001”、“00000011”、“00000010” 等等
这可能吗?
提前谢谢你
最佳答案
function combinations( input ){
var number = parseInt( input, 2 );
var combinations = [];
var zeroes = (new Array(input.length)).join(0);
for(var i=1;i<=number;i++){
if((i&number) == i){ combinations.push( i ) }
}
return combinations.map( function(dec){
return (zeroes + dec.toString(2)).substr( -zeroes.length-1 );
});
}
http://jsfiddle.net/jkf7pfxn/3/
console.log( combinations("00001011") );
// ["00000001", "00000010", "00000011", "00001000", "00001001", "00001010", "00001011"]
思路如下:迭代从 1 到输入数字的所有数字。如果当前数字 AND 输入数字返回当前数字,则两者在同一位置都有 1
位。
在较小的数字上,“0101”
(即 5
),它的工作方式如下:
1 & 5 == 1
, (0001 & 0101) 将 1
推到匹配项.
2 & 5 == 0
, (0010 & 0101) 不匹配。
3 & 5 == 1
, (0011 & 0101) 不匹配。
4 & 5 == 4
, (0100 & 0101) 将 4
推送到比赛。
5 & 5 == 5
, (0101 & 010 1) 将 5
推送到匹配项。
所以 0101
的组合是 1
(0001
), 2
(0010
)、4
(0100
)和5
(0101
)。
然后有这个用零填充数字的小技巧:
var zeroes = (new Array(input.length)).join(0); // gives a long enough string of zeroes
然后
// convert to base 2, add the zeroas at the beginning,
// then return the last n characters using negative value for substring
return (zeroes + dec.toString(2)).substr( -1 * zeroes.length);
关于Javascript - 具有所有可能组合的字节字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33433977/