题目要求

给你一个仅由数字 0 - 9 组成的字符串 num。如果偶数下标处的数字之和等于奇数下标处的数字之和,则认为该数字字符串是一个 平衡字符串

如果 num 是一个 平衡字符串,则返回 true;否则,返回 false

示例 1:

输入:num = "1234"
输出:false
解释:
偶数下标处的数字之和为 1 + 3 = 4,奇数下标处的数字之和为 2 + 4 = 6。
由于 4 不等于 6,num 不是平衡字符串。

示例 2:

输入:num = "24123"
输出:true
解释:
偶数下标处的数字之和为 2 + 1 + 3 = 6,奇数下标处的数字之和为 4 + 2 = 6。
由于两者相等,num 是平衡字符串。

 提示:

  • 2 <= num.length <= 100

  • num 仅由数字 0 - 9 组成。

算法整体功能

这段代码定义了一个名为 Solution 的类,其中包含一个名为 isBalanced 的方法。该方法接收一个字符串 num 作为参数,此字符串代表一个数字。方法的作用是判断这个数字是否 “平衡”,“平衡” 的定义为:数字中偶数位置(从 0 开始计数)的数字之和等于奇数位置的数字之和。

算法代码

class Solution:
    def isBalanced(self, num: str) -> bool:
        # 初始化一个变量 sumnum,用于存储计算结果
        sumnum = 0
        # 使用 enumerate 函数遍历字符串 num 中的每个字符,并将其转换为整数
        # enumerate 函数会同时返回字符的索引 i 和字符转换后的整数 c
        for i, c in enumerate(map(int, num)):
            # 如果索引 i 是偶数,将对应的数字 c 取负后加到 sumnum 上
            # 如果索引 i 是奇数,将对应的数字 c 直接加到 sumnum 上
            sumnum += c if i % 2 else -c
        # 判断 sumnum 是否等于 0
        # 如果等于 0,说明偶数位置数字之和等于奇数位置数字之和,返回 True
        # 否则返回 False
        return sumnum == 0

算法函数详解

函数定义

def isBalanced(self, num: str) -> bool:
  • 函数名isBalanced

  • 参数

    • self:在类的方法中,self 是一个约定俗成的参数名,代表类的实例对象本身。

    • num:一个字符串类型的参数,代表要判断的数字。

  • 返回值:返回一个布尔值,如果数字是 “平衡” 的,返回 True,否则返回 False

函数实现步骤

初始化变量
sumnum = 0

初始化一个变量 sumnum,用于存储偶数位置数字之和与奇数位置数字之和的差值。

遍历字符串
for i, c in enumerate(map(int, num)):

使用 enumerate 函数遍历字符串 num 中的每个字符,并将其转换为整数。enumerate 函数会同时返回字符的索引 i 和字符转换后的整数 c

计算差值
sumnum += c if i % 2 else -c

如果索引 i 是偶数,将对应的数字 c 取负后加到 sumnum 上;如果索引 i 是奇数,将对应的数字 c 直接加到 sumnum 上。

判断结果
return sumnum == 0

判断 sumnum 是否等于 0,如果等于 0,说明偶数位置数字之和等于奇数位置数字之和,返回 True,否则返回 False

复杂度分析

  • 时间复杂度\(O(n)\),其中 n 是字符串 num 的长度。因为需要遍历字符串中的每个字符一次。

  • 空间复杂度\(O(1)\),只使用了常数级的额外空间。