当前位置: 首页 > 面试经验 >

最新华为OD机试真题-字符串中整数求和(100分)

优质
小牛编辑
89浏览
2024-07-31

最新华为OD机试真题-字符串中整数求和(100分)

大家好这里是清隆学长 ,一枚热爱算法的程序员

ACM金牌️团队 | 编程一对一辅导

✨ 本系列打算持续跟新华为OD-D卷的三语言AC题解

感谢大家的订阅➕ 和 喜欢 和手里的小花花

最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线评测

最新华为OD机试目录: https://www.nowcoder.com/discuss/636153620743897088?sourceSSR=users

在线评测链接

字符串中整数求和(100分)

评测功能需要 =>订阅专栏<= 后联系清隆解锁~

OJ题目截图

字符串中整数求和

问题描述

给定一个只包含小写英文字母和数字的字符串 ,请计算出 中所有整数的最小和。其中,合法的整数包括以下两种情况:

  1. 正整数由一个或多个数字 组成,如 等。
  2. 负整数以负号 开头,数字部分由一个或多个 组成,如 等。

输入格式

输入为一行,包含一个字符串

输出格式

输出一行,为 中所有整数的最小和。

样例输入 1

bb1234aa

样例输出 1

10

样例解释 1

字符串中只有一个整数 ,因此最小和为

样例输入 2

bb12-34aa

样例输出 2

-31

样例解释 2

1 + 2 - 34 = -31

数据范围

  • 字符串 的长度在 范围内。
  • 字符串 只包含小写英文字母和数字。

题解

我们可以从左到右扫描字符串,遇到数字时累加到结果中,遇到负号时将后面的负数减去。具体做法是使用两个指针 指向当前字符, 指向负数的末尾。每次遇到负号时,将 移动到负数的末尾,将负数转换为整数后减去即可。

参考代码

  • Python
def soln(s):
    res = 0
    n = len(s)
    i = 0
    while i < n:
        if s[i].isdigit():
            res += int(s[i])
        elif s[i] == '-':
            j = i + 1
            while j < n and s[j].isdigit():
                j += 1
            res -= int(s[i+1:j])
            i = j - 1
        i += 1
    return res

s = input()
print(soln(s))
  • Java
import java.util.Scanner;

public class Main {
    public static long calculateSum(String input) {
 类似资料: