Easy
题目描述
给你一个仅由数字组成的字符串 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 <= 100num仅由数字组成
解题思路
这道题要求检查一个数字字符串是否平衡,即偶数索引位置的数字之和是否等于奇数索引位置的数字之和。
解题思路:
最直观的解法是遍历字符串,分别计算偶数索引和奇数索引位置的数字之和,最后比较两个和是否相等。
具体步骤:
- 初始化两个变量
evenSum和oddSum,分别用于存储偶数索引和奇数索引位置数字的和 - 遍历字符串,根据索引的奇偶性将对应的数字加到相应的和中
- 最后比较两个和是否相等
优化思路: 还可以使用一个变量来记录差值,偶数索引的数字加上,奇数索引的数字减去,最后检查差值是否为0。这种方法在空间复杂度上略有优化,但时间复杂度相同。
推荐使用第一种方法,因为逻辑更清晰易懂。
代码实现
class Solution {
public:
bool isBalanced(string num) {
int evenSum = 0, oddSum = 0;
for (int i = 0; i < num.length(); i++) {
if (i % 2 == 0) {
evenSum += num[i] - '0';
} else {
oddSum += num[i] - '0';
}
}
return evenSum == oddSum;
}
};
class Solution:
def isBalanced(self, num: str) -> bool:
even_sum = 0
odd_sum = 0
for i in range(len(num)):
if i % 2 == 0:
even_sum += int(num[i])
else:
odd_sum += int(num[i])
return even_sum == odd_sum
public class Solution {
public bool IsBalanced(string num) {
int evenSum = 0, oddSum = 0;
for (int i = 0; i < num.Length; i++) {
if (i % 2 == 0) {
evenSum += num[i] - '0';
} else {
oddSum += num[i] - '0';
}
}
return evenSum == oddSum;
}
}
var isBalanced = function(num) {
let evenSum = 0;
let oddSum = 0;
for (let i = 0; i < num.length; i++) {
if (i % 2 === 0) {
evenSum += parseInt(num[i]);
} else {
oddSum += parseInt(num[i]);
}
}
return evenSum === oddSum;
};
复杂度分析
| 复杂度类型 | 复杂度 | 说明 |
|---|---|---|
| 时间复杂度 | O(n) | 需要遍历字符串一次,n 为字符串长度 |
| 空间复杂度 | O(1) | 只使用了常数个额外变量 |
相关题目
- . Balanced Binary Tree (Easy)