华为机试:整数最小和

【编程题目 | 100分】整数最小和 [ 100 / 中等 ]

整数最小和
题目描述:

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

说明:
  1. 字符串s,只包含 a-z A-Z ± ;

  2. 合法的整数包括

    1) 正整数 一个或者多个0-9组成,如 0 2 3 002 102

    2)负整数 负号 - 开头,数字部分由一个或者多个0-9组成,如 -0 -012 -23 -00023

输入描述:

包含数字的字符串

输出描述:

所有整数的最小和

示例 1:
输入
bb1234aa
输出
10
说明
1+2+3+4=10
示例 2:
输入
bb12-34aa
输出
-31
说明
1+2+-34= 31
思路分析

这道题主要是负号的判断,遇到负号的时候,负号后面跟的数字字符串作为一个整体,才能最小。没有遇到负号的时候,单个字符相加,和最小。所以在flag=true的情况下,把所有数字加入字符串,之后无论遇到其它字符或者再遇到负号,都用sum减去这个整体字符串对应的整数。

参考代码

Java代码实现:

import java.util.*;

public class IntegerMinSum {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        char[] ch = str.toCharArray();
        int sum = 0;
        boolean flag = false; // 负数
        StringBuilder sb = new StringBuilder();
        for (char c : ch) {
            if (c >= '0' && c <= '9') {  // 如果是数字
                if (flag) {  // 如果是负号后面的数字,加到sb中
                    sb.append(c);
                } else {  // 正数直接求和
                    sum += Integer.parseInt(c + "");
                }
            } else if ('-' == c) {  // 如果是'-'
                if (flag) {
                    if (!sb.toString().isEmpty()) {  // 遇到负号后,将负号后面的连续数字组成字符串
                        sum -= Integer.parseInt(sb.toString());  // 如果sb不空
                        sb = new StringBuilder();
                    }
                }
                flag = true;
            } else {  // 其它字符
                flag = false;  // 用来判断负号后的字符串结束
                if (!sb.toString().isEmpty()) {  // 队列不空,说明负号字符串到此为止,将去整体
                    sum -= Integer.parseInt(sb.toString());
                    sb = new StringBuilder();
                }
            }
        }
        if (flag) {
            if (!sb.toString().isEmpty()) {
                sum -= Integer.parseInt(sb.toString());
            }
        }
        System.out.print(sum);
    }
}
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值