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

【华为OD-E卷 - 求字符串中所有整数的最小和 100分(python、java、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解法

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

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

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解法

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

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

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解法

  • 解题思路

更新中

注意:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/953026.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习张量的秩、轴和形状

深度学习张量的秩、轴和形状 秩、轴和形状是在深度学习中我们最关心的张量属性。 秩轴形状 秩、轴和形状是在深度学习中开始使用张量时我们最关心的三个属性。这些概念相互建立&#xff0c;从秩开始&#xff0c;然后是轴&#xff0c;最后构建到形状&#xff0c;所以请注意这…

Observability:将 OpenTelemetry 添加到你的 Flask 应用程序

作者&#xff1a;来自 Elastic jessgarson 待办事项列表可以帮助管理与假期计划相关的所有购物和任务。使用 Flask&#xff0c;你可以轻松创建待办事项列表应用程序&#xff0c;并使用 Elastic 作为遥测后端&#xff0c;通过 OpenTelemetry 对其进行监控。 Flask 是一个轻量级…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(五)

文章目录 一、学生管理模块功能实现1、添加学生功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、学生管理功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询接口实现2.3.2 后端编辑接口实现2.3.3 后端删除接口实现2.4 效果展示二、代码…

使用Cilium/eBPF实现大规模云原生网络和安全

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 目录 抽象 1 Trip.com 云基础设施 1.1 分层架构 1.2 更多细节 2 纤毛在 Trip.com 2.1 推出时间表 2.2 自定义 2.3 优化和调整 2.3.1 解耦安装 2.3.2 避免重试/重启风暴 2.3.3 稳定性优先 2…

CTFshow—文件包含

Web78-81 Web78 这题是最基础的文件包含&#xff0c;直接?fileflag.php是不行的&#xff0c;不知道为啥&#xff0c;直接用下面我们之前在命令执行讲过的payload即可。 ?filephp://filter/readconvert.base64-encode/resourceflag.php Web79 这题是过滤了php&#xff0c;…

62.在 Vue 3 中使用 OpenLayers 设置不同的坐标点,用不同的颜色区分

前言 在现代 Web 开发中&#xff0c;地图功能已经成为许多应用的重要组成部分。OpenLayers 是一个强大的开源地图库&#xff0c;支持多种地图源和地图操作。结合 Vue 3 的响应式特性&#xff0c;我们可以轻松实现地图的交互功能。本文将详细介绍如何在 Vue 3 中使用 OpenLayer…

Spring 项目 基于 Tomcat容器进行部署

文章目录 一、前置知识二、项目部署1. 将写好的 Spring 项目先打包成 war 包2. 查看项目工件&#xff08;Artifact&#xff09;是否存在3. 配置 Tomcat3.1 添加一个本地 Tomcat 容器3.2 将项目部署到 Tomcat 4. 运行项目 尽管市场上许多新项目都已经转向 Spring Boot&#xff0…

【学习笔记】数据结构(十一)

外部排序 文章目录 外部排序11.1 外存信息的存取11.2 外部排序的方法11.3 多路平衡归并的实现 - 增加k11.4 置换-选择排序 - 减少m11.5 最佳归并树 外部排序 指的是大文件的排序&#xff0c;即待排序的记录存储在外存储器 上&#xff0c;在排序过程中需进行多次的内、外存之间的…

《跟我学Spring Boot开发》系列文章索引❤(2025.01.09更新)

章节文章名备注第1节Spring Boot&#xff08;1&#xff09;基于Eclipse搭建Spring Boot开发环境环境搭建第2节Spring Boot&#xff08;2&#xff09;解决Maven下载依赖缓慢的问题给火车头提提速第3节Spring Boot&#xff08;3&#xff09;教你手工搭建Spring Boot项目纯手工玩法…

【Linux笔记】Day1

基于韩顺平老师课程记录&#xff1a; https://www.bilibili.com/video/BV1Sv411r7vd 安装CentOS 给CentOS手动分区 分为三个区&#xff1a; boot分区&#xff08;给1G就行&#xff09; 交换分区&#xff08;和内存相关&#xff0c;这里和虚拟机的内存2G一致&#xff09; …

【网络】:网络编程套接字

目录 源IP地址和目的IP地址 源MAC地址和目的MAC地址 源端口号和目的端口号 端口号 VS 进程ID TCP协议和UDP协议 网络字节序 字符串IP和整数IP相互转换 查看当前网络的状态 socket编程接口 socket常见API 创建套接字 绑定端口号 发送数据 接收数据 sockaddr结构…

使用 Multer 上传图片到阿里云 OSS

文件上传到哪里更好&#xff1f; 上传到服务器本地 上传到服务器本地&#xff0c;这种方法在现今商业项目中&#xff0c;几乎已经见不到了。因为服务器带宽&#xff0c;磁盘 IO 都是非常有限的。将文件上传和读取放在自己服务器上&#xff0c;并不是明智的选择。 上传到云储存…

【端云一体化】云函数的使用

前言 为丰富HarmonyOS对云端开发的支持、实现端云联动&#xff0c;DevEco Studio以Cloud Foundation Kit&#xff08;云开发服务&#xff09;为底座、在传统的“端开发”基础上新增“云开发”能力&#xff0c;开发者在创建工程时选择合适的云开发工程模板&#xff0c;即可在De…

YARN 架构组件及原理

一、YARN 体系架构 YARN&#xff08;Yet Another Resource Negotiator&#xff0c;另一种资源协调者&#xff09; 是 Hadoop 2.0 中的资源管理系统&#xff0c;它的基本设计思想是将 MRv1 中的 JobTracker拆分成了两个独立的服务 &#xff1a;一个全局的资源管理器 ResourceMa…

C# GDI+的DrawString无法绘制Tab键的现象

【啰嗦2句】 现在用C#的人很少了吧&#xff1f;GDI更少了吧&#xff1f;所以这个问题估计也冷门。没关系&#xff0c;分享给特定需要的人也不错。 【问题现象】 工作中开发了一个报告编辑器&#xff0c;实现图文排版等功能&#xff0c;用着没什么问题&#xff0c;直到有一天…

最近在盘gitlab.0.先review了一下docker

# 正文 本猿所在产品的代码是保存到了一个本地gitlab实例上&#xff0c;实例是别的同事搭建的。最近又又又想了解一下&#xff0c;而且已经盘了一些了&#xff0c;所以写写记录一下。因为这个事儿没太多的进度压力&#xff0c;索性写到哪儿算哪儿&#xff0c;只要是新了解到的…

春秋云镜——initial

初步认识内网渗透流程 thinkphp外网打点 打开环境后尝试登陆无果&#xff0c;用fscan扫一下看看 fscan.exe -h 39.99.224.87 发现是think PHP漏洞 补充&#xff1a; fscan&#xff1a;一款内网综合扫描工具&#xff0c;方便一键自动化、全方位漏扫扫描。支持主机存活探测、端…

【C++】string的关系运算与比较分析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;基础知识&#xff1a;C 中的 string 关系运算器1. 关系运算器概述2. 字符串比较的本质 &#x1f4af;代码解析与扩展代码例一&#xff1a;相等比较代码解析输出 代码例二&a…

Qt C++读写NFC标签NDEF网址URI

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1biFgjSs&ftt&id615391857885 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include "QLibrary" …

NVIDIA Clara平台助力医学影像处理:编程案例与实践探索(上)

一、引言 1.1 研究背景与意义 在现代医学领域,医学影像技术已然成为疾病诊断、治疗方案制定以及疗效评估的关键支柱。从早期的 X 射线成像,到如今的计算机断层扫描(CT)、磁共振成像(MRI)、正电子发射断层扫描(PET)等先进技术,医学影像为医生提供了直观、精准的人体内…