题目要求
给你一个仅由数字 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)\),只使用了常数级的额外空间。