为运算表达式设计优先级

谁说我不能喝 提交于 2020-02-12 23:09:00

题目
给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。

输入: “23-45”
输出: [-34, -14, -10, -10, 10]
解释:
(2*(3-(45))) = -34
((2
3)-(45)) = -14
((2
(3-4))5) = -10
(2
((3-4)5)) = -10
(((2
3)-4)*5) = 10

来源:力扣(LeetCode)

基础题:递归加回溯(未剪枝,可用hashmap)

public List<Integer> diffWaysToCompute(String input) {
        return helper(input);
    }
	public List<Integer> helper(String s) {
		List<Integer>list = new ArrayList<Integer>();
		if(!s.contains("+")&&!s.contains("-")&&!s.contains("*")) {
			list.add(Integer.valueOf(s));
			return list;
		}
		for(int i = 0;i<s.length();i++) {
			if(s.charAt(i)=='+'||s.charAt(i)=='-'||s.charAt(i)=='*') {
				for(int p1:helper(s.substring(0,i))) 
					for(int p2:helper(s.substring(i+1,s.length()))) {
						if(s.charAt(i)=='+') {list.add(p1+p2);}
						else if(s.charAt(i)=='-') {list.add(p1-p2);}
						else {list.add(p1*p2);}
					}
			}
		}
		return list;
	}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!