前端算法-颠倒二进制

简介: 前端算法-颠倒二进制

题目

颠倒给定的 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;
};


相关文章
|
6天前
|
移动开发 算法 前端开发
前端算法之堆排序
前端算法之堆排序
13 1
|
6天前
|
算法 前端开发
前端算法之快速排序
前端算法之快速排序
12 0
|
6天前
|
算法 前端开发 搜索推荐
前端算法之归并排序
前端算法之归并排序
10 0
|
4天前
|
算法
【免费】面向多微网网络结构设计的大规模二进制矩阵优化算法
【免费】面向多微网网络结构设计的大规模二进制矩阵优化算法
|
6天前
|
算法 前端开发
前端算法之基数排序
前端算法之基数排序
9 1
|
6天前
|
算法 前端开发 搜索推荐
前端算法之桶排序
前端算法之桶排序
6 1
|
6天前
|
存储 算法 前端开发
前端算法之计数排序
前端算法之计数排序
10 1
|
6天前
|
算法 前端开发 搜索推荐
前端算法之希尔排序
前端算法之希尔排序
4 0
|
6天前
|
算法 前端开发 搜索推荐
前端算法之插入排序
前端算法之插入排序
9 0
|
6天前
|
算法 前端开发 搜索推荐
前端算法之选择排序
前端算法之选择排序
10 0