Basic Calculator & Basic Calculator II

原创 2015年07月11日 08:59:28

Basic Calculator

Description:

Implement a basic calculator to evaluate a simple expression string.

The expression string may contain open ( and closing parentheses ), the plus + or minus sign -non-negative integers and empty spaces .

You may assume that the given expression is always valid.

Basic Calculator II

 

Description:

mplement a basic calculator to evaluate a simple expression string.

The expression string contains only non-negative integers, +-*/ operators and empty spaces . The integer division should truncate toward zero.

You may assume that the given expression is always valid.

Solution:

使用逆波兰表达式来解决这个问题,经典问题   逆波兰表达式

代码包含了加减乘除和括号

import java.util.*;

public class Solution {

	public int calculate(String s) {
		LinkedList<String> list = new LinkedList<String>();
		s = s + " ";
		toReversePolishNotation(s, list);
		System.out.println(list.toString());
		return calcReversePolishNotation(list);
	}

	void toReversePolishNotation(String s, LinkedList<String> list) {
		Stack<Character> operation = new Stack<Character>();
		operation.push('(');
		int preNum = 0;

		char ch;
		int currentLevel;
		for (int i = 0; i < s.length(); i++) {
			ch = s.charAt(i);
			if (ch >= '0' && ch <= '9') {
				preNum = preNum * 10 + ch - '0';
				if (s.charAt(i + 1) < '0' || s.charAt(i + 1) > '9') {
					list.add(preNum + "");
					preNum = 0;
				}
			} else {
				if (ch == '(') {
					operation.push(ch);
				} else if (ch == ')') {
					char tempC;
					while (!operation.isEmpty()) {
						tempC = operation.pop();
						if (tempC == '(')
							break;
						list.add(tempC + "");
					}
				} else if (ch != ' ') {
					currentLevel = getLevel(ch);

					char tempC;
					while (!operation.isEmpty()) {
						tempC = operation.peek();
						if (getLevel(tempC) < currentLevel)
							break;
						operation.pop();
						list.add(tempC + "");
					}
					operation.push(ch);
				}
			}
		}

		char tempC;
		while (operation.size() > 1) {
			tempC = operation.pop();
			list.add(tempC + "");
		}

		return;
	}

	int getLevel(char ch) {
		if (ch == '(')
			return 0;
		if (ch == '+')
			return 1;
		if (ch == '-')
			return 1;
		if (ch == '*')
			return 2;
		if (ch == '/')
			return 2;
		return 0;
	}

	int calcReversePolishNotation(LinkedList list) {
		Iterator<String> ite = list.iterator();
		Stack<Integer> stack = new Stack<Integer>();
		String temp;
		int second, first;
		while (ite.hasNext()) {
			temp = ite.next();
			if (temp.equals("+")) {
				second = stack.pop();
				first = stack.pop();
				stack.push(first + second);
			} else if (temp.equals("-")) {
				second = stack.pop();
				first = stack.pop();
				stack.push(first - second);
			} else if (temp.equals("*")) {
				second = stack.pop();
				first = stack.pop();
				stack.push(first * second);
			} else if (temp.equals("/")) {
				second = stack.pop();
				first = stack.pop();
				stack.push(first / second);
			} else {
				stack.push(Integer.parseInt(temp));
			}
		}

		return stack.pop();
	}

	public static void main(String[] args) {
		Solution s = new Solution();
		System.out.println(s.calculate("1-2+3"));
		System.out.println(s.calculate("1-(2+3)"));
		System.out.println(s.calculate("2*4-2*3"));
	}
}


【LeetCode】Basic Calculator && Basic Calculator II

1、Basic Calculator  Total Accepted: 3726 Total Submissions: 24053 My Submissions Question Solution  ...
  • u013027996
  • u013027996
  • 2015年06月24日 11:01
  • 3511

LeetCode 227. Basic Calculator II 解题报告【python】

思路分析 该题是一个简单的表达式求值问题,我们可以采用“算符优先法”来解决该问题。该算法在严蔚敏的《数据结构C语言版》第三章有详细描述。 该题中的每一个表达式都是由操作数和操作符组成,根据四则运算法则...
  • kuaisuzhuceh
  • kuaisuzhuceh
  • 2016年01月30日 14:11
  • 605

LeetCode[227] Basic Calculator II

实现一个基本的计算器 https://leetcode.com/problems/basic-calculator-ii/支持简单的’+’,’-‘,’*’,’/’功能。之前在学数据结构的Stack时有...
  • hust_dxxxd
  • hust_dxxxd
  • 2016年05月04日 11:29
  • 377

leetcode 227: Basic Calculator II

leetcode 227: Basic Calculator II PYTHON JAVA C++
  • xudli
  • xudli
  • 2015年06月26日 03:18
  • 6894

Leetcode 224: Basic Calculator

Leetcode 224: Basic Calculator java c++ python
  • xudli
  • xudli
  • 2015年06月19日 00:59
  • 7579

LeetCode 770. Basic Calculator IV题目解析

转载源:戳这里题目解析此题是LeetCode 772的加强版,我们依然使用递归下降法来解决这个问题,文法如下:exp := exp +|- additive | additiveadditive :=...
  • cqx5555
  • cqx5555
  • 2018年01月26日 12:47
  • 140

LeetCode-227. Basic Calculator II (JAVA)实现计算器 II

LeetCode-227. Basic Calculator II (JAVA)实现计算器 II
  • mine_song
  • mine_song
  • 2017年04月30日 09:54
  • 446

【LeetCode】Basic Calculator 解题报告

【题目】 Implement a basic calculator to evaluate a simple expression string. The expression str...
  • ljiabin
  • ljiabin
  • 2015年06月14日 11:19
  • 8273

224. Basic Calculator | Java最短代码实现

原题链接:224. Basic Calculator 【思路】 本题考查字符串的基本操作。总共遇到的情况有:数字、+、-、空格、左括号、右括号,6种情况。 1. 没有括号时正常运算,将结果存入r...
  • happyaaaaaaaaaaa
  • happyaaaaaaaaaaa
  • 2016年03月20日 15:12
  • 802

LeetCode 224 Basic Calculator (后缀表达式 栈)

LeetCode 224 Basic Calculator (后缀表达式 栈)
  • Tc_To_Top
  • Tc_To_Top
  • 2016年08月28日 23:45
  • 843
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Basic Calculator & Basic Calculator II
举报原因:
原因补充:

(最多只允许输入30个字)