【华为OD-E卷 - 求字符串中所有整数的最小和 100分(python、java、c++、js、c)】

embedded/2025/1/12 10:46:49/

pythonjavacjsc_0">【华为OD-E卷 - 求字符串中所有整数的最小和 100分(pythonjava、c++、js、c)】

题目

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

输入描述

  • 包含数字的字符串

输出描述

  • 所有整数的最小和

用例

用例一:
输入:
bb1234aa
输出:
10
用例二:
输入:
bb12-34aa
输出:
bb12-34aa

说明 1+2+(-34) = -31

python_53">python解法

  • 解题思路:
  • 这段代码实现了一个字符串处理算法,用于从输入字符串中解析出所有的数字,并根据其符号(正号或负号)计算一个最终的最小和。具体步骤如下:

解析字符串中的字符:逐一检查每个字符,判断是数字还是非数字。
处理负号和正号:
如果遇到数字并且处于负号后,累积到一个列表中,稍后解析为负数。
如果遇到数字并且处于非负号状态,则直接加到总和中。
处理负数累积逻辑:
每次遇到非数字字符时,检查是否存在累积的负数。如果有,将其从总和中减去。
返回结果:遍历结束后,返回总和,考虑最后可能存在的未处理负数。

python">s = input()  # 输入一个字符串# 解析负数函数,将收集的负数字符串列表解析为整数
def parse_negative(neg_digits):if len(neg_digits) > 0:  # 如果负数字符列表非空return int("".join(neg_digits))  # 将字符拼接成字符串,再转为整数return 0  # 如果列表为空,返回0# 算法入口:从输入字符串计算最小和
def find_min_sum(input_str):is_neg = False  # 标记当前是否在处理负数neg_num = []    # 用于存储当前负数的数字部分total = 0       # 用于存储最终的总和# 遍历输入字符串中的每一个字符for idx, char in enumerate(input_str):if char.isdigit():  # 如果字符是数字if is_neg:  # 如果前面有负号neg_num.append(char)  # 将数字字符加入负数列表else:  # 如果前面没有负号total += int(char)  # 直接将数字加到总和中else:  # 如果字符不是数字if is_neg:  # 如果正在处理负数total -= parse_negative(neg_num)  # 将负数累积值从总和中减去neg_num.clear()  # 清空负数列表,准备处理下一个is_neg = (char == '-')  # 更新是否为负数标记# 遍历结束后,检查是否还有未处理的负数if is_neg:total -= parse_negative(neg_num)return total  # 返回最终计算的总和# 输出最终计算结果
print(find_min_sum(s))

java_105">java解法

  • 解题思路
  • 这段代码的目标是从一个字符串中解析出所有的数字,根据其符号(正号或负号)计算一个最终的和。代码使用了 BigInteger 类型来处理可能出现的任意长度的大数字。具体步骤如下:

解析字符:逐一遍历字符串中的每个字符,判断是否为数字。
处理正负符号:
如果数字前面有负号,将数字累积到一个缓冲区,稍后作为负数处理。
如果数字前面没有负号,则直接加到总和中。
管理数字缓冲区:
遇到非数字字符时,检查缓冲区是否有未处理的负数。如果有,将缓冲区的内容从总和中减去。
遇到新负号时重置缓冲区,准备解析下一个负数。
结果输出:遍历完成后,返回总和。

java">import java.math.BigInteger;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in); // 读取输入System.out.println(getResult(sc.nextLine())); // 调用方法处理输入字符串并输出结果}// 计算字符串中所有数字的和(考虑正负符号)public static String getResult(String s) {boolean isNegative = false; // 标记当前数字是否为负数StringBuilder numberBuffer = new StringBuilder(); // 用于存储当前解析的数字BigInteger sum = BigInteger.ZERO; // 用于存储最终结果(初始化为0)// 遍历字符串中的每个字符for (int i = 0; i < s.length(); i++) {char currentChar = s.charAt(i); // 当前字符if (Character.isDigit(currentChar)) { // 如果当前字符是数字if (isNegative) { // 如果处于负号状态numberBuffer.append(currentChar); // 将数字添加到缓冲区} else { // 如果是正数sum = sum.add(new BigInteger(String.valueOf(currentChar))); // 直接加到总和中}} else { // 如果当前字符不是数字sum = updateSumAndResetBuffer(isNegative, numberBuffer, sum); // 更新总和并清空缓冲区isNegative = currentChar == '-'; // 判断当前字符是否是负号,更新标记}}// 遍历结束后,检查是否有未处理的负数sum = updateSumAndResetBuffer(isNegative, numberBuffer, sum);return sum.toString(); // 将最终结果转为字符串返回}// 更新总和并重置数字缓冲区private static BigInteger updateSumAndResetBuffer(boolean isNegative, StringBuilder numberBuffer, BigInteger sum) {if (isNegative && numberBuffer.length() > 0) { // 如果缓冲区有未处理的负数sum = sum.subtract(new BigInteger(numberBuffer.toString())); // 将负数从总和中减去numberBuffer.setLength(0); // 清空缓冲区}return sum; // 返回更新后的总和}
}

C++解法

  • 解题思路
更新中

C解法

  • 解题思路

更新中

JS解法

  • 解题思路

javascript">更新中

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏


http://www.ppmy.cn/embedded/153262.html

相关文章

深入浅出Java Web开放平台:从API设计到安全保障的全方位探索

随着互联网的快速发展&#xff0c;越来越多的企业开始构建开放平台&#xff0c;特别是在Java Web开发中&#xff0c;如何实现高效的开放平台接口&#xff0c;保障系统的安全性&#xff0c;并且提升开发者的体验&#xff0c;已经成为了很多开发者关注的热点话题。本文将深入探讨…

macbook使用 pip 安装 pyicu 报错

1、问题分析 当使用ragflow等开源工具进行二次开发时&#xff0c;在安装基础项目依赖&#xff0c;需要使用到很多系统中的基础库&#xff0c;时常会报错&#xff0c;今天遇到的问题是 pyicu 包安装时报错。 基本问题分析&#xff0c;安装 pyicu 时&#xff0c;需要使用系统中…

centos 搭建nginx+配置域名+windows访问

准备工作&#xff1a;一个完整的centos环境&#xff0c;nginx安装包(可以从官网下载)nginx: download 一&#xff1a;centos可能有精简版&#xff0c;部分环境没有相关依赖包&#xff0c; 需要检查以下项&#xff1a; 1.gcc检查&#xff1a;gcc -v&#xff08;回车后应当有版…

OpenCV基于均值漂移算法(pyrMeanShiftFiltering)的水彩画特效

1、均值漂移算法原理 pyrMeanShiftFiltering算法结合了均值迁移&#xff08;Mean Shift&#xff09;算法和图像金字塔&#xff08;Image Pyramid&#xff09;的概念&#xff0c;用于图像分割和平滑处理。以下是该算法的详细原理&#xff1a; 1.1 、均值迁移&#xff08;Mean …

React面试常见题目

在前端面试中&#xff0c;React 是一个非常重要的知识点&#xff0c;面试题目往往涵盖基础概念和高级应用。以下是常见的面试题目以及进阶题目的整理和详解。 一、基础题目 1. React 的核心概念 问&#xff1a;React 的生命周期有哪些&#xff1f;如何在函数组件中使用&#…

vue实现淘宝web端,装饰淘宝店铺APP,以及后端设计成能快速响应前端APP

一、前端实现 实现一个类似于淘宝店铺的装饰应用&#xff08;APP&#xff09;是一个复杂的任务&#xff0c;涉及到前端界面设计、拖放功能、模块化组件、数据管理等多个方面。为了简化这个过程&#xff0c;我们可以创建一个基本的 Vue 3 应用&#xff0c;允许用户通过拖放来添…

彻底学会Gradle插件版本和Gradle版本及对应关系

看完这篇&#xff0c;保你彻底学会Gradle插件版本和Gradle版本及对应关系&#xff0c;超详细超全的对应关系表 需要知道Gradle插件版本和Gradle版本的对应关系&#xff0c;其实就是需要知道Gradle插件版本对应所需的gradle最低版本&#xff0c;详细对应关系如下表格&#xff0…

芯片详细讲解,从而区分CPU、MPU、DSP、GPU、FPGA、MCU、SOC、ECU

目录 芯片的概念结构 芯片的派系划分 通用芯片&#xff08;CPU&#xff0c;MPU&#xff0c;GPU&#xff0c;DSP&#xff09; 定制芯片&#xff08;FPGA&#xff0c;ASIC&#xff09; 芯片之上的集成&#xff08;MCU&#xff0c;SOC&#xff0c;ECU&#xff09; 软硬件的匹…