华为OD机试 Python【求字符串中所有整数的最小和】

该博客介绍了如何解决华为在线测评(OD)中的一道Python题目,要求从输入字符串中找出所有整数并计算它们的最小和。解题策略涉及遍历字符串,识别正负整数,并累加到总和中。

题目

输入字符串s,输出s中包含所有整数的最小和。

说明:
字符串s,只包含 a-z A-Z ± ;
合法的整数包括
1) 正整数 一个或者多个0-9组成,如 0 2 3 002 102
2)负整数 负号 – 开头,数字部分由一个或者多个0-9组成,如 -0 -012 -23 -00023

输入描述
包含数字的字符串

输出描述
所有整数的最小和

用例

输入	
bb1234aa
输出	
10

解题思路

遍历输入字符串的字符数组,检查每个字符是否是数字字符。如果是数字字符,则将其添加到总和中,否则检查是否是负号,如果是,则将后续数字字符转换为负数并从总和中减去。

代码

# -*- coding: utf-8 -*-

def calculate_min_integer_sum(input_str):
    is_negative = False
    negative_digits = []
    total_sum = 0

    for char in input_str:
        if char.isdigit():
            if is_negative:
                negative_digits.append(int(char))
            else:
                total_sum += int(char)
        else:
            if is_negative and negative_digits:
                negative_value = int(''.join(map(str, negative_digits)))
                total_sum -= negative_value
                negative_digits.clear()
            is_negative = char == '-'

    if negative_digits:
        negative_value = int(''.join(map(str, negative_digits)))
        total_sum -= negative_value

    return total_sum

def main():
    input_str = input()
    result = calculate_min_integer_sum(input_str)
    print(result)

if __name__ == "__main__":
    main()

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值