zoukankan      html  css  js  c++  java
  • LeetCode: Evaluate Reverse Polish Notation

    这题只要理解RPN的原理就不难,用一个stack就行了。为虾米leetcode不提供atoi函数~~只好自己临时写个。注意负数的情况就可以了

     1 class Solution {
     2 public:
     3     int stringtoint(string s) {
     4         int ans = 0;
     5         for (int i = isdigit(s[0])? 0 : 1; i < s.size(); i++) {
     6             ans = ans*10 + s[i] - '0';
     7         }
     8         return isdigit(s[0])? ans : -ans;
     9     }
    10     int evalRPN(vector<string> &tokens) {
    11         int res = 0;
    12         stack<int> S;
    13         for (int i = 0; i < tokens.size(); i++) {
    14             if (isdigit(tokens[i][0]) || tokens[i].size() > 1 && isdigit(tokens[i][1])) S.push(stringtoint(tokens[i]));
    15             else {
    16                 int a = S.top();
    17                 S.pop();
    18                 int b = S.top();
    19                 S.pop();
    20                 if (tokens[i] == "+") S.push(b+a);
    21                 if (tokens[i] == "-") S.push(b-a);
    22                 if (tokens[i] == "*") S.push(b*a);
    23                 if (tokens[i] == "/") S.push(b/a);
    24             }
    25         }
    26         return S.top();
    27     }
    28 };

     C#

     1 public class Solution {
     2     public int EvalRPN(string[] tokens) {
     3         int ans = 0;
     4         Stack<int> S = new Stack<int>();
     5         for (int i = 0; i < tokens.Length; i++) {
     6             if (isdigit(tokens[i][0]) || tokens[i].Length > 1 && isdigit(tokens[i][1])) S.Push(stringtoint(tokens[i]));
     7             else {
     8                 int a = S.Peek();
     9                 S.Pop();
    10                 int b = S.Peek();
    11                 S.Pop();
    12                 if (tokens[i] == "+") S.Push(b + a);
    13                 if (tokens[i] == "-") S.Push(b - a);
    14                 if (tokens[i] == "*") S.Push(b * a);
    15                 if (tokens[i] == "/") S.Push(b / a);
    16             }
    17         }
    18         return S.Peek();
    19     }
    20     public bool isdigit(char c) {
    21         return c <= '9' && c >= '0';
    22     }
    23     public int stringtoint(string s) {
    24         int ans = 0;
    25         for (int i = isdigit(s[0])? 0 : 1; i < s.Length; i++) {
    26             ans = ans * 10 + s[i] - '0';
    27         }
    28         return isdigit(s[0])? ans : -ans;
    29     }
    30 }
    View Code
  • 相关阅读:
    resteasy和springmvc的区别
    队列
    栈的顺序存储和链式存储
    线性表链表存储结构(单链表)
    线性表顺序存储结构
    maven创建分model的工程
    使用throw和throws 引发异常
    手写web框架之加载Controller,初始化框架
    手写web框架之实现依赖注入功能
    Kruskal算法(贪心+并查集=最小生成树)
  • 原文地址:https://www.cnblogs.com/yingzhongwen/p/3510033.html
Copyright © 2011-2022 走看看