华为OD 求字符串中所有整数的最小和 Java

题目描述

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

输入

包含数字的字符串

输出

所有整数的最小和

示例

输入:
bb1234aa

输出:
10

Java代码:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class getMinSum {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        char[] chars = s.toCharArray();
        int res = 0;
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] > '0' && chars[i] <= '9') {
                res += chars[i] - '0';
            } else if (chars[i] == '-') {
                StringBuilder builder = new StringBuilder();
                builder.append('-');
                while (i + 1 < chars.length && chars[i + 1] >='0' && chars[i + 1] <= '9') {
                    builder.append(chars[i + 1]);
                    i++;
                }
                // 处理 - 号后跟字母或其他字符的情况
                if (!builder.toString().equals("-")) {
                    res += Integer.parseInt(builder.toString());
                }
            }
        }
        System.out.println(res);
    }
}

问题总结

1.处理异常 For input string: "-"

该问题唯一困扰我的点是在于通过某项用例时总是报错 For input string: "-",这是因为在用例中存在 - 号后是其他字符的缘故,导致 builder 中只有负号而不能成功地转换为整数。因此,我通过 if (!builder.toString().equals("-")) 来规避这一情况。

2.走的弯路

在开始解题的时候,我曾尝试通过正则表达式 regex = [^0-9 -] 来去除其他字符,再通过 regex = -+ 来去除连续的负号。但是这种方法并不奏效。准确来讲,在原题目中的意思是:负数可以通过负号来识别,而正数则要通过其他字符的隔离才能识别,如果将其他字符都除去,那对于负数和正数的判断就会出错,例如:对于 1+abced-521abc5 正确的识别应该为:1-521+5,但是上述方法却会识别为:1-5215,因此不适用。

测试

OJ算法

题目编号结果内存时间语言代码长度
3107正确36536 KiB862 msJava/Edit1561 bytes

侵权必删声明
本资料部分内容来源于互联网及公开渠道,仅供学习和交流使用,版权归原作者所有。若涉及版权问题,敬请原作者联系我,我将立即处理或删除相关内容。感谢您的理解与支持。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值