【华为面试基础题】求字符串中所有整数的最小和

描述

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

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

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

示例1

输入: bb1234aa
输出:10

示例2

输入:bb12-34aa
输出:-31
说明:1+2+(-34) = -31

解题思路

  1. 首先,通过input()函数获取用户输入的字符串,并将其赋值给变量s
  2. 计算字符串的长度,并将其赋值给变量length
  3. 创建一个空列表num,用于存储提取到的数字。
  4. 初始化一个变量i为0,作为字符串遍历的索引。
  5. 使用while循环遍历字符串中的每个字符:
    • 如果当前字符是数字,将其转换为整数并添加到num_l列表中,然后将i加1,继续处理下一个字符。
    • 如果当前字符是负号(“-”),将其添加到stage字符串中,然后将i加1,继续处理下一个字符。
      • 在这个阶段,使用for循环遍历从当前索引i开始的剩余字符,直到遇到非数字字符为止。将遇到的数字字符添加到stage字符串中,并将i加1。
      • stage字符串转换为整数,并将其添加到num_l列表中。
    • 如果当前字符既不是数字也不是负号,将i加1,继续处理下一个字符。
  6. 初始化一个变量sum_num为0,用于存储数字之和。
  7. 使用for循环遍历num列表中的每个数字,将其累加到sum_num中。
  8. 最后,输出sum_num的值,即提取到的数字之和。
s = input()
length = len(s)
num = []
i = 0
stage = ""

while i < length:
    if s[i].isdigit():
        num.append(int(s[i]))
        i += 1
    elif s[i] == "-":
        stage += s[i]
        i += 1
        for j in range(i, length):
            if s[j].isdigit():
                stage += s[j]
                i += 1
            else:
                break
        num.append(int(stage))
        stage = ""
    else:
        i += 1

sum_num = 0
for i in num:
    sum_num += i

print(sum_num)

你可能感兴趣的:(华为面试基础题,华为,算法,python)