用php完成LeetCode – Evaluate Reverse Polish Notation

来源:互联网 发布:华山 险 知乎 编辑:程序博客网 时间:2024/06/16 03:13

以我写的前一篇的‘关于php中栈的基本操作’ http://blog.csdn.net/martinhacker/article/details/60781815 完成的leetcode 的一道栈的问题,phper可以参考一下。
题目:http://www.programcreek.com/2012/12/leetcode-evaluate-reverse-polish-notation/

<?php/** * Created by PhpStorm. * User: user * Date: 07/03/2017 * Time: 21:35 */class node{    private $value;    private $pre;    public function __construct($value){        $this->value = $value;        $this->pre = null;    }    public function addPre($node){        $this->pre = $node;    }    public function getPre(){        return $this->pre;    }    public function getValue(){        return $this->value;    }}class stack{    private $top;    static public $size;    public function __construct($value = null){        $this->top = new node($value);    }    public function push($value){        $current = $this->top;        $newNode = new node($value);        $newNode->addPre($current);        $this->top = $newNode;    }    public function getAllStack(){        $stack = null;        $current = $this->top;        while ($current->getPre() != null){            $stack .= $current->getValue()."\n";            $current = $current->getPre();        }        return $stack;    }    public function getSize(){        $current = $this->top;        while (null != $current->getValue()){            self::$size++;            $current = $current->getPre();        }        return self::$size;    }    public function pop(){        $tmp = $current = $this->top;        $this->top = $current->getPre();        unset($current);        return $tmp->getValue();    }    public function getTop(){        return $this->top->getValue();    }    public function isempty(){        if (null == $this->getTop()){            return false;        }        return true;    }}class stackReverse{    public function calculate($arrs){        $stack = new stack();        $operator = '+-*/';        foreach ($arrs as $arr){            if (!strstr($operator, $arr)){                $stack->push($arr);            }else{                if ($stack->isempty()){                    $a = $stack->pop();                    $b = $stack->pop();                    switch ($arr){                        case '+':                            $stack->push($a + $b);break;                        case '-':                            $stack->push($a - $b);break;                        case '*':                            $stack->push($a * $b);break;                        case '/':                            $stack->push($a / $b);break;                    }                }            }        }        return $stack->getTop();    }}$stackReverse = new stackReverse();$arrs = [4, 13, 5, "/", "+"];$res = $stackReverse->calculate($arrs);var_dump($res);
0 0
原创粉丝点击