Appearance
190. 颠倒32未无符号整数二进制位
解法一:二进制运算
js
/**
* @param {number} n - a positive integer
* @return {number} - a positive integer
*/
var reverseBits = function(n) {
let result = 0;
let count = 0;
while(count < 32) {
let num = n % 2;
result = result * 2 + num;
n = Math.floor(n / 2);
count++;
}
return result;
};
这个时候用for循环也可以
解法二:转换成字符数组处理
js
/**
* @param {number} n - a positive integer
* @return {number} - a positive integer
*/
var reverseBits = function(n) {
// 转换成二进制字符串并转换成字符数组
let arr = n.toString(2).split('');
let len = arr.length;
// 给不满32位的填零
for(let i = 0; i < 32 - len; i++) {
arr.unshift(0);
}
// 反转数组
let start = 0;
let end = arr.length - 1;
while(start < end) {
const temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
// 转换成十进制
const result = arr.join('');
return parseInt(result, 2);
};
TIP
将二进制数转化成二进制数组,要用toString(2),记得补位
js
/**
* @param {number} n - a positive integer
* @return {number} - a positive integer
*/
var reverseBits = function(n) {
// 转换成二进制字符串并转换成字符数组
let arr = n.toString(2).split('');
let len = arr.length;
// 给不满32位的填零
for(let i = 0; i < 32 - len; i++) {
arr.unshift(0);
}
// 反转数组
let start = 0;
let end = arr.length - 1;
while(start < end) {
const temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
let result = 0;
// 转换成十进制
arr.forEach((val) => {
result = result * 2 + Number(val)
})
return result;
};