没有括号的算式 面试算法

Posted 412013cl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有括号的算式 面试算法相关的知识,希望对你有一定的参考价值。

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;
    }
}

  

以上是关于没有括号的算式 面试算法的主要内容,如果未能解决你的问题,请参考以下文章

Java写一个计算器 控制台输入算式 可以实现先乘除后加减 没有括号功能 只有加减乘除

算法训练 最大的算式

java中怎么将字符串(带运算符号加减乘除)转换成代数算式运算

蓝桥杯 算法训练 ALGO-116 最大的算式

算法训练 最大的算式(DP)

如何理解这段代码片段中的两对括号?