• [编程] 没有括号的算式 面试 算法 (四)


    import java.util.Scanner;
    
    public class Test {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            String next = scanner.next();
            System.out.println(test(next));
        }
        /**
         * 有一个写在黑板上的加减法算式,运算符只包含加号、减号和括号,但其中的括号被清洁工擦去了。现在需要你写一个算法计算这个算式括号被擦去之前的可能的最小结果值。
         * <p>
         * 输入:
         * 仅有一行,被擦去括号后的算式
         * <p>
         * 输入约束:
         * 算式最多有50个字符,且其中仅包含0-9和+、-
         * 算式的第一个字符一定是数字
         * 算式中不会连续出现两个运算符
         * 算式中每个整数最多有5位
         * <p>
         * 输出:
         * 一个整数:即括号被擦去之前,该算式可能的最小结果值
         * <p>
         * 举例1:
         * 输入:
         * 55-50+40
         * 输出:
         * -35
         * 解释:
         * 通过增加括号,该算式有两种可能的结果:55-50+40=45和55-(50+40)=-35
         * <p>
         * 举例2:
         * 输入:
         * 10+20+30+40
         * 输出:
         * 100
         * 解释:
         * 由于输入中没有减号,因此无论怎么加括号,结果也只能是100
         * <p>
         * 举例3:
         * 输入:
         * 00009-00009
         * 输出:
         * 0
         * 解释:注意算式中的整数可能有前导0.
         *
         * @param str
         * @return
         */
        static int test(String str) {
            String[] split = str.split("-");
            String retStr = "";
            for (int i = 0; i < split.length; i++) {
                if (split[i].indexOf("+") != -1) {
                    String[] sp2 = split[i].split("\+");
                    int s = Integer.parseInt(sp2[0]);
                    for (int c = 1; c < sp2.length; c++) s += Integer.parseInt(sp2[c]);
                    retStr += "-" + s;
                } else retStr += "-" + split[i];
            }
            if (retStr.substring(0, 1).equals("-")) retStr = retStr.substring(1);
            String[] split1 = retStr.split("-");
            int n = Integer.parseInt(split1[0]);
            for (int i = 1; i < split1.length; i++) n -= Integer.parseInt(split1[i]);
            return n;
        }
    }
    

      

  • 相关阅读:
    C语言进阶—— 单引号和双引号14
    C语言进阶——注释符号12
    C语言进阶——enum, sizeof, typedef 分析11
    算法01
    vim+软件安装——06
    if(xx)和(a==b) 关于数据类型的转换
    浏览器的渲染机制,白屏和FOUC
    BFC的概念和解决外边距合并
    CSS有哪几种引入方式
    块级元素和行内元素的区别,常见的块级元素和行内元素有哪些
  • 原文地址:https://www.cnblogs.com/412013cl/p/11768268.html
Copyright © 2020-2023  润新知