返回

二进制求和 - LeetCode 67 - 从不同角度看算法和编码的艺术

IOS

LeetCode 是一家在线算法练习平台,它提供了一系列算法题供用户解决。这些算法题涵盖了各种各样的领域,包括数据结构、算法、字符串、数组、树、图等等。LeetCode 题目的难度从简单到困难都有,因此非常适合不同水平的程序员练习和学习。

LeetCode 67 二进制求和是LeetCode中的一道经典算法题,它要求我们将两个二进制数字相加,并返回结果。这道题非常简单,但它却可以帮助我们理解很多重要的算法概念,比如二进制加法、进位、以及如何将一个十进制数字转换成二进制数字。

二进制加法

二进制加法与十进制加法非常相似。在十进制中,我们使用 10 个数字(0 到 9)来表示数字。在二进制中,我们只使用两个数字(0 和 1)来表示数字。

二进制加法的规则如下:

  • 0 + 0 = 0
  • 0 + 1 = 1
  • 1 + 0 = 1
  • 1 + 1 = 10(进位 1)

进位

当两个二进制数字相加结果大于等于 2 时,就会发生进位。例如:

  • 1 + 1 = 10(进位 1)
  • 10 + 1 = 11(进位 1)
  • 11 + 1 = 100(进位 1)

将十进制数字转换成二进制数字

为了将一个十进制数字转换成二进制数字,我们可以使用以下方法:

  1. 将十进制数字除以 2,并将余数记录下来。
  2. 重复步骤 1,直到商为 0。
  3. 将记录下来的余数倒序排列,即可得到二进制数字。

例如,我们将十进制数字 13 转换成二进制数字:

  1. 13 ÷ 2 = 6 余 1
  2. 6 ÷ 2 = 3 余 0
  3. 3 ÷ 2 = 1 余 1
  4. 1 ÷ 2 = 0 余 1

将余数倒序排列,得到二进制数字 1101。

代码实现

func addBinary(_ a: String, _ b: String) -> String {
    // 将两个二进制字符串转换为整数
    let aInt = Int(a, radix: 2)!
    let bInt = Int(b, radix: 2)!

    // 将两个整数相加
    let sum = aInt + bInt

    // 将整数转换为二进制字符串
    let sumStr = String(sum, radix: 2)

    // 返回结果
    return sumStr
}

总结

二进制求和是一道非常简单的算法题,但它却可以帮助我们理解很多重要的算法概念。通过这道题,我们学习了二进制加法、进位、以及如何将一个十进制数字转换成二进制数字。我们还学习了如何使用 Swift 语言来实现二进制求和算法。