国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

算法學習——算術表達式

2019-11-06 06:16:55
字體:
供稿:網(wǎng)友
題目描述:

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.Some examples:"1 + 1" = 2" 2-1 + 2 " = 3

"(1+(4+5+2)-3)+(6+8)" = 23

題目分析:

這道題是標準算數(shù)表達式的一個變式,區(qū)別在于題目之中的有括號有省略的情況。所以整體思路為:雙棧,一個棧stack放操作數(shù),一個棧opr放操作符。

思路:遇到+ 、-、(的時候,操作符壓棧opr

            遇到)的時候,從stack 和opr中彈出計算需要的操作數(shù)個數(shù),同時把結(jié)果壓棧stack,直到遇到(為止

            在計算完這一組括號了之后,持續(xù)計算,到上一個(為止,這是處理()中的數(shù)作為一個操作數(shù)的情況

            遇到數(shù)字的情況,壓棧,同時計算到(為止,這是保證從左到右的運算數(shù)據(jù)

注: 也可以以后綴表達的角度來理解這道題。

/** * @param {string} s * @return {number} */var calculate = function(s) {    var string = [];    for(var i=0; i<s.length; i++){        if(s[i] == ' ') continue;        var str = "";        while(s[i]-'0'>=0 && s[i] -'9'<=0){           str += s[i];            i++;        }                if(str.length > 0) string.push(str);                s[i] && string.push(s[i]);    }       var stack = [],opr = [],i=0,len=string.length;   while(i<len){      if(string[i] =='+'|| string[i]== '-' || string[i] == '('){          opr.push(string[i]);          i++;      }else if(string[i] == ')'){          while(opr[opr.length-1] !== '('){              var n2 = stack.pop(),                  n1 = stack.pop(),                  op = opr.pop();                                    stack.push(op == '+'? n1+n2: n1-n2);          }          opr.pop(); // 去掉(                    while(opr.length>0 && opr[opr.length-1]!== '('){//把前面的運算式都計算了              var n2 = stack.pop(),                  n1 = stack.pop(),                  op = opr.pop();                                    stack.push(op == '+'? n1+n2: n1-n2);          }                    i++;      }else{          stack.push(parseInt(string[i],10));          while(opr.length>0 && opr[opr.length-1]!== '('){//把前面的運算式都計算了              var n2 = stack.pop(),                  n1 = stack.pop(),                  op = opr.pop();                                    stack.push(op == '+'? n1+n2: n1-n2);          }                    i++;                }   }      return stack.pop();   };


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 镇坪县| 商洛市| 辽阳县| 胶南市| 大关县| 洛南县| 利津县| 钟山县| 浦县| 六安市| 托里县| 蓬安县| 鞍山市| 海南省| 静安区| 泸州市| 万盛区| 潍坊市| 富裕县| 贺兰县| 靖远县| 通州区| 佛学| 土默特左旗| 景东| 阿克苏市| 旬阳县| 公主岭市| 大埔区| 商水县| 新竹市| 环江| 东源县| 图片| 游戏| 江油市| 霍邱县| 开江县| 盐城市| 和田市| 赤壁市|