开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情
题目
颠倒给定的 32 位无符号整数的二进制位。
输入:n = 00000010100101000001111010011100
输出:964176192 (00111001011110000010100101000000)
解释:输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
思路一
我们已知有符号数是利用二进制最高位表示符号,0代表正,1代表负无符号为表示的是最高位的0、1代表正常的数,而不是符号,所以我们可以使用位运算符进行实现,先声明一个res变量默认为0,然后使用循环进行循环32次,在循环中我们每次都取末尾值使用位运算符计算后相加存储到res变量中,然后再使用位运算符对n形参进行更新,最后使用位运算符将res和0运算过后的结果返回出去
var reverseBits = function(n) {
let res = 0
for(let i = 0;i<32;i++){
res = (res << 1) + (n & 1);
n >>= 1;
}
return res>>>0
};
思路二
我们先将n形参使用toString方法转为二进制数,然后再使用split方法获得数组,在使用reverse方法进行倒序排列,在使用join方法将将数组转为字符串,最后使用padEnd方法补齐位数,最后通过parseInt方法将二进制数转为十进制数,最后返回出去即可
var reverseBits = function(n) {
return parseInt(n.toString(2).split('').reverse().join('').padEnd(32,'0'), 2);
};
思路三
我们先创建result变量以及count变量,默认值都为0,在声明循环,循环值循环32次,我们每循环一次都用count进行记录,我们在循环中判断n形参是否存在,如果存在则将当前n形参余2之后赋值给temp变量,然后再更新result变量和形参n,如果不存在则将result变量乘2并重新赋值给自己,每次循环都将count变量自增1,最后将result变量返回出去即可
var reverseBits = function(n) {
let result = 0;
let count = 0;
while(n || count < 32) {
if (n) {
let temp = n % 2;
result = result * 2 + temp;
n = Math.floor(n / 2);
} else {
result = result * 2;
}
count++;
}
return result;
};