返回

以不同视角探索LeetCode:二进制与数学难题之旅(JS)

前端

揭开LeetCode二进制与数学难题的面纱

踏上LeetCode的二进制与数学难题之旅,让我们用JavaScript探索算法之美。从位运算到数字转换,从进制转换到进制问题,解锁编程技能的新高度。

二进制,计算机世界的基础语言,在LeetCode中也扮演着举足轻重的角色。位运算、位移、异或等操作,是二进制难题的常见解题思路。学习这些技巧,你会发现LeetCode中的许多难题迎刃而解。

数学问题也是LeetCode的常客。从简单的加减乘除到复杂的数论算法,数学知识在LeetCode中有着广泛的应用。掌握数学技巧,你会发现LeetCode中的许多难题变得更加清晰。

经典难题与JavaScript解法

在LeetCode中,二进制与数学难题数不胜数。以下是一些经典难题与JavaScript解法,供您参考学习:

  • 191. 位1的个数 :给定一个整数,计算其二进制表示中1的个数。
/*
 * @param {number} n - 输入的整数
 * @return {number} - 1的个数
 */
const hammingWeight = (n) => {
  let count = 0;
  while (n) {
    count++;
    n &= n - 1;
  }
  return count;
};
  • 326. 3的幂 :给定一个整数,判断其是否是3的幂。
/*
 * @param {number} n - 输入的整数
 * @return {boolean} - 是否是3的幂
 */
const isPowerOfThree = (n) => {
  if (n <= 0) {
    return false;
  }
  while (n % 3 === 0) {
    n /= 3;
  }
  return n === 1;
};
  • 136. 只出现一次的数字 :给定一个数组,其中所有元素都出现了两次,只有一个元素只出现了一次。找到这个只出现了一次的元素。
/*
 * @param {number[]} nums - 输入的数组
 * @return {number} - 只出现了一次的元素
 */
const singleNumber = (nums) => {
  let result = 0;
  for (const num of nums) {
    result ^= num;
  }
  return result;
};
  • 172. 阶乘后的零 :给定一个非负整数n,求n!末尾有多少个0。
/*
 * @param {number} n - 输入的非负整数
 * @return {number} - n!末尾有多少个0
 */
const trailingZeroes = (n) => {
  let count = 0;
  while (n >= 5) {
    n /= 5;
    count += Math.floor(n);
  }
  return count;
};
  • 7. 整数反转 :给定一个32位有符号整数,将其反转并返回。
/*
 * @param {number} x - 输入的32位有符号整数
 * @return {number} - 反转后的整数
 */
const reverse = (x) => {
  let result = 0;
  const isNegative = x < 0;
  x = Math.abs(x);
  while (x > 0) {
    result = result * 10 + x % 10;
    x = Math.floor(x / 10);
  }
  return isNegative ? -result : result;
};
  • 171. Excel表列序号 :给定一个Excel表中的列号,返回其对应的数字。
/*
 * @param {string} columnTitle - 输入的Excel表列号
 * @return {number} - 对应的数字
 */
const titleToNumber = (columnTitle) => {
  let result = 0;
  for (const char of columnTitle) {
    result = result * 26 + char.charCodeAt(0) - 'A'.charCodeAt(0) + 1;
  }
  return result;
};
  • 190. 颠倒二进制位 :给定一个32位无符号整数,颠倒其二进制位并返回。
/*
 * @param {number} n - 输入的32位无符号整数
 * @return {number} - 颠倒二进制位后的整数
 */
const reverseBits = (n) => {
  let result = 0;
  for (let i = 0; i < 32; i++) {
    result <<= 1;
    result |= n & 1;
    n >>= 1;
  }
  return result;
};

结语

LeetCode的二进制与数学难题,是算法学习之旅中的宝贵财富。这些难题不仅考验着你的编程技能,也锻炼着你的数学思维。通过不断地练习和学习,你终将成为一名算法高手。