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

223次阅读
没有评论

共计 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);
    }
}
正文完
 1
裴先生
版权声明:本站原创文章,由 裴先生 2022-05-16发表,共计833字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
本站勉强运行: