返回

十进制和二进制转换更轻松,巧用Number.prototype.toString()与parseInt()

前端

十进制数和二进制数是两种不同的数字系统。十进制数使用 10 个数字(0 到 9)来表示数字,而二进制数则使用 2 个数字(0 和 1)来表示数字。这两种数字系统在计算机科学中都有广泛的应用。十进制数通常用于表示人类可读的数字,例如电话号码或日期。而二进制数则通常用于表示计算机内部的数据,例如内存中的数据或存储在磁盘上的数据。

在 JavaScript 中,十进制数和二进制数都可以使用 Number 类型来表示。Number 类型是一个内置类型,可用于表示任何数字。要将十进制数转换为二进制数,可以使用 Number.prototype.toString() 方法。该方法将数字转换为字符串,并以指定的进制数表示。例如,要将十进制数 100 转换为二进制数,可以使用以下代码:

const binaryString = (100).toString(2);
console.log(binaryString); // 输出:1100100

要将二进制数转换为十进制数,可以使用 parseInt() 函数。该函数将字符串转换为整数,并以指定的进制数进行解释。例如,要将二进制数 1100100 转换为十进制数,可以使用以下代码:

const decimalNumber = parseInt('1100100', 2);
console.log(decimalNumber); // 输出:100

需要注意的是,Number.prototype.toString() 方法对于负数是无能为力的。这意味着您无法使用该方法将负十进制数转换为二进制数。同样,parseInt() 函数也不能将负二进制数转换为十进制数。如果您需要转换负数,则需要使用其他方法。

在 LeetCode 题目【1018-可被5整除的二进制前缀】中,我们遇到了这样的一个问题:给定一个二进制数组 nums,如果可以从中删去一些元素,使得剩余元素组成的二进制数可以被 5 整除,求最少需要删去的元素数量。

这个问题可以转化为一个动态规划问题。我们可以使用一个二维数组 dp 来存储子问题的结果。其中,dp[i][j] 表示从数组 nums 中前 i 个元素中删除一些元素,使得剩余元素组成的二进制数可以被 5 整除,并且删除的元素数量为 j 的最少删除次数。

我们可以使用以下递推公式来计算 dp[i][j]:

dp[i][j] = min(dp[i-1][j], dp[i-1][j-1] + (nums[i] == 1 ? 1 : 0))

其中,min() 函数取两个数中的最小值。

我们从 dp[0][0] 开始计算,并逐步计算出所有 dp[i][j] 的值。当我们计算出所有 dp[n][j] 的值时,其中 n 是数组 nums 的长度,我们就可以得到问题的解。问题的解是 min(dp[n][0], dp[n][1], ..., dp[n][n])。

使用动态规划方法可以有效地解决这个问题。该方法的时间复杂度为 O(n^2),其中 n 是数组 nums 的长度。