位运算:求解《868. 二进制间距》

2022-04-24 03:35:58
位运算,求解《868. 二进制间距》


遍历顺序

Golang 科学计数法

例题

868. 二进制间距

给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。 如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。

答案

位运算
var binaryGap = function(n) {
  let i = r = 0, j = 1e9
  while (n) {
    if (n & 1) {
      r = Math.max(r, i - j)
      j = i
    }
    n >>= 1
    i++
  }
  return r
};
func binaryGap(n int) int {
  i, r, j := 0, 0, int(1E9)
  for n > 0 {
    if n & 1 == 1 {
      if i - j > r {
        r = i - j
      }
      j = i
    }
    n >>= 1
    i++
  }
  return r
}
class Solution {
    function binaryGap($n) {
      $i = $r = 0;
      $j = 1e9;
      while ($n) {
        if ($n & 1 === 1) {
          $r = max($r, $i - $j);
          $j = $i;
        }
        $n >>= 1;
        $i++;
      }
      return $r;
    }
}
位运算:二进制求和,求解《面试题 17.01. 不用加号的加法》和《剑指 Offer 65. 不用加减乘除做加法》
位运算,用二进制求和,求解《面试题 17.01. 不用加号的加法》和《剑指 Offer 65. 不用加减乘除做加法》