Skip to content

190. 颠倒32未无符号整数二进制位

leetCode-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;
};

MIT Licensed