JS算法-颠倒二进制位

简介: JS算法-颠倒二进制位

题目


颠倒给定的 32 位无符号整数的二进制位。

输入:n = 11111111111111111111111111111101
输出:3221225471 (10111111111111111111111111111111)


题解


第一种


首先我们在函数中先定义了一个空数组reverseBinary变量和变量numbertnumbert分别用于记录翻转后的十进制数和二进制位的权值。然后使用while循环将十进制数n转换为二进制数,并将每一位存入reverseBinary数组中,此时数组中的元素是从低位到高位排列的,接下来判断reverseBinary数组的长度是否为32,如果不足32位,则在数组的前面添加0,使其长度达到32位,最后使用forEach循环遍历reverseBinary数组,计算翻转后的十进制数,即将每一位二进制数乘以对应的权值,然后累加到number变量中,最后返回number即可

var reverseBits = function (n) {
  var reverseBinary = [];
  var number = 0, t = 1, i;
  while (n) {
    reverseBinary.unshift(n % 2);
    n = Math.floor(n / 2);
  }
  if (reverseBinary.length < 32) {
    let len = 32 - reverseBinary.length;
    for (i = 0; i < len; i++) {
      reverseBinary.unshift(0);
    }
  }
  reverseBinary.forEach(function (value) {
    number += value * t;
    t *= 2;
  })
  return number;
};


第二种


将整数n转换成二进制形式。使用toString(2)方法将整数转换成二进制字符串,如果转换后的二进制字符串长度小于32,使用while循环在字符串左侧补0,直到长度为32。这样可以确保所有的二进制字符串都是32位的,将32位二进制字符串n转换成数组形式,便于后面的遍历操作,遍历二进制字符串数组n,当数组元素为1时,使用Math.pow(2,i)方法计算该位的值,将所有计算出的值累加到sum变量中,最后返回sum变量,即为反转后的32位无符号整数

var reverseBits = function (n) {
  n = n.toString(2);
  while (n.length < 32) {
    n = '0' + n;
  }
  n = n.split('');
  var sum = 0;
  for (var i = 0; i < n.length; i++) {
    if (n[i] == '1') sum += Math.pow(2, i);
  }
  return sum;
};
相关文章
|
2月前
|
算法 JavaScript 前端开发
彩票中奖率的真相:用 JavaScript 看透彩票背后的随机算法(下)
至于分发?我们可以参考一下市面上已有的一些概念做一下对比,下面是笼统的一个网络服务器的TPS预估值,也就是说彩票服务器在1秒内可以处理的最大请求数:
|
2月前
|
数据采集 算法 JavaScript
彩票中奖率的真相:用 JavaScript 看透彩票背后的随机算法(上)
原本这篇文章是打算叫「假如我是彩票系统开发者」,但细想一下,如果在文章中引用太多的 JavaScript 的话,反而不是那么纯粹,毕竟也只是我的一厢情愿,彩票开发也不全如本文所讲,有所误导的话便也是得不偿失了。
|
1月前
|
缓存 JavaScript 算法
Vue.js中的diff算法:让虚拟DOM更高效
Vue.js中的diff算法:让虚拟DOM更高效
|
3月前
|
算法 JavaScript
|
3月前
|
算法 JavaScript
|
3月前
|
算法 JavaScript
|
3月前
|
算法 JavaScript
JS算法-二叉树的右视图
JS算法-二叉树的右视图
|
3月前
|
算法 JavaScript
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真