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

leetCode数组

https://leetcode-cn.com/problems/reverse-bits/ (opens new window)

# 解法一:二进制运算

/**
 * @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;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

这个时候用for循环也可以

# 解法二:转换成字符数组处理

/**
 * @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);
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

将二进制数转化成二进制数组,要用toString(2),记得补位























 
 
 
 
 
 


/**
 * @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;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
更新时间: 2022-03-25 17:04