【算法题】输出字符串中包含所有整数的最小和

  • A+
所属分类:编程茶楼


共计 833 个字符,预计需要花费 3 分钟才能阅读完成。

import java.util.Scanner;
/**
 * 输入字符串s输出s中包含所有整数的最小和
 * 说明:
 * 字符串s只包含az,AZ,+,-,
 * 合法的整数包括正整数,一个或者多个0-9组成,如:0,2,3,002,102
 * 负整数,负号开头,数字部分由一个或者多个0-9组成,如-2,-012,-23,-00023
 * 输入描述:
 * 包含数字的字符串
 * 输出描述:
 * 所有整数的最小和
 * 示例
 * 输入:
 * bb1234aa
 * 输出:
 * 10
 * 输入:
 * bb12-34aa
 * 输出:
 * -31
 * 说明:
 * 1+2-(34)=-31
 */
public class OD_Z_T_01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();
        char[] chars = (line + "+").toCharArray();

        boolean flag = false; // 定义一个标记,是否是‘-’后面的数字,如果是的话就把数字串起来最大
        StringBuilder sb = new StringBuilder(); // 用来拼接负数字符
        int sum_min = 0;
        for (char aChar : chars) {
            if (Character.isDigit(aChar)) { //判断是否为数字
                if (flag) {
                    sb.append(aChar); // 如果负数就先拼接
                } else {
                    sum_min += aChar - 48; // 其他符号后面的直接计算,才能得到最小正数
                }

                continue;
            }

            if (flag && sb.length() != 0) { // 把前面拼接好的字符串计算出来,并且置空
                sum_min -= Integer.parseInt(sb.toString());
                sb.setLength(0);
            }

            flag = aChar == '-'; // 遇到负号改变标记
        }

        System.out.println(sum_min);
    }
}
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: