逆波蘭表達(dá)式 ——2017阿里校招題

由于在線筆試過(guò)程中,不能切出瀏覽器窗口阵翎,就沒(méi)有采用本地 IDE 編程院领,直接在線徒手寫.....
后來(lái)考試結(jié)束后,在本地 IDE 運(yùn)行了一下,結(jié)果基本正確浴麻,放下來(lái)和大家分享一下.....(我也是試試水去的得问,見(jiàn)識(shí)到阿里的牛逼了,選擇題基本不會(huì)寫软免,就把兩個(gè)編程題水了一下宫纬,這題是復(fù)制在剪切板上弄出來(lái)的)
blog.luyunfeng.cn

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/*一個(gè)對(duì)于一個(gè)單行的逆波蘭表達(dá)式,由如下元素構(gòu)成:
        數(shù)字:十進(jìn)制數(shù)字字符構(gòu)成的正整數(shù)膏萧,比如 223
        運(yùn)算符:支持三種運(yùn)算符^+和*漓骚,分別代表自增,加法和乘法
        分隔符:一個(gè)或者多個(gè)空格
        例如下面的字符串就是個(gè)逆波蘭表達(dá)式
        2 3  4 * ^ 5 +

        逆波蘭表達(dá)式在一個(gè)基于棧的虛擬機(jī)中求解榛泛,
        虛擬機(jī)的棧能保存16個(gè)整數(shù)蝌蹂,虛擬機(jī)從左向右掃描表達(dá)式,
        遇到整數(shù)就壓棧挟鸠,遇到表達(dá)式則從棧頂彈出若干個(gè)整數(shù)進(jìn)行計(jì)算叉信,
        計(jì)算結(jié)果重新壓回棧中。其中運(yùn)算符^從棧頂彈出一個(gè)整數(shù)艘希,增加1之后壓棧硼身;
        運(yùn)算符+和*從棧頂彈出兩個(gè)整數(shù),分別做相加和相乘運(yùn)算后壓棧覆享。
        如果遇到運(yùn)算符的時(shí)候佳遂,棧內(nèi)沒(méi)有足夠的整數(shù),稱為下溢出撒顿,返回-1丑罪;
        把整數(shù)壓棧的時(shí)候,如果棧沒(méi)有足夠的空間,稱為上溢出吩屹,返回-2跪另;
        如果整個(gè)計(jì)算過(guò)程中沒(méi)有發(fā)生溢出,在整個(gè)表達(dá)式求解完成后煤搜,返回棧頂?shù)恼麛?shù)免绿。
 */
public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String line = in.nextLine();
        if (line != null && !line.isEmpty()) {
            int res = resolve(line.trim());
            //打印出結(jié)果
            System.out.println(String.valueOf(res));
        }
    }


    // 計(jì)算  放入棧前  檢查是否上溢出,出棧的時(shí)候檢查是否下溢出
    public static int resolve(String expr) {
        ArrayList<String> inputs = func(expr);
        MyStack m = new MyStack();//生成逆波蘭表達(dá)式的棧
        for (String s : inputs) {
            if (s.matches("\\d+")) {
                if (m.size() > 16) {
                    //上溢出
                    return -2;
                } else {
                    m.push(s);
                }

            } else if (s.equals("^")) {
                //下溢出
                if (m.size() == 0) {
                    return -1;
                } else {
                    int a = Integer.parseInt(m.pop());
                    a++;
                    m.push("" + a);
                }

            } else {
                if (m.size() < 2) {
                    //下溢出
                    return -1;
                } else {
                    int b = Integer.parseInt(m.pop());
                    int a = Integer.parseInt(m.pop());
                    if (s.equals("+")) {
                        a = a + b;
                    } else if (s.equals("*")) {
                        a = a * b;
                    }
                    m.push("" + a);
                }

            }
        }
        return Integer.parseInt(m.pop());

    }

    // 處理一下輸入擦盾,將每個(gè)字符都放入數(shù)組中嘲驾,
    public static ArrayList<String> func(String expr) {
        ArrayList<String> inputs = new ArrayList<String>();
        String[] sa = expr.split(" ");
        for (int i = 0; i < sa.length; i++) {
            if (sa[i].equals("")) {
                continue;
            } else {
                inputs.add(sa[i]);
            }
        }
        return inputs;
    }
}


//自定義棧
class MyStack {
    private List<String> list;
    private int size;
    public String top;

    public MyStack() {
        list = new ArrayList<String>();
        size = 0;
        top = null;
    }

    public int size() {
        return size;
    }

    public void push(String s) {
        list.add(s);
        top = s;
        size++;
    }

    public String pop() {
        String s = list.get(size - 1);
        list.remove(size - 1);
        size--;
        top = size == 0 ? null : list.get(size - 1);
        return s;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市迹卢,隨后出現(xiàn)的幾起案子辽故,更是在濱河造成了極大的恐慌,老刑警劉巖腐碱,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件誊垢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡喻杈,警方通過(guò)查閱死者的電腦和手機(jī)彤枢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門狰晚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)筒饰,“玉大人,你說(shuō)我怎么就攤上這事壁晒〈擅牵” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵秒咐,是天一觀的道長(zhǎng)谬晕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)携取,這世上最難降的妖魔是什么攒钳? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮雷滋,結(jié)果婚禮上不撑,老公的妹妹穿的比我還像新娘。我一直安慰自己晤斩,他們只是感情好焕檬,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著澳泵,像睡著了一般实愚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天腊敲,我揣著相機(jī)與錄音击喂,去河邊找鬼。 笑死碰辅,一個(gè)胖子當(dāng)著我的面吹牛茫负,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乎赴,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼忍法,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了榕吼?” 一聲冷哼從身側(cè)響起饿序,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎羹蚣,沒(méi)想到半個(gè)月后原探,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡顽素,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年咽弦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胁出。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡型型,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出全蝶,到底是詐尸還是另有隱情闹蒜,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布抑淫,位于F島的核電站绷落,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏始苇。R本人自食惡果不足惜砌烁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望催式。 院中可真熱鬧函喉,春花似錦、人聲如沸蓄氧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)喉童。三九已至撇寞,卻和暖如春顿天,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蔑担。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工牌废, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人啤握。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓鸟缕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親排抬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子懂从,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,264評(píng)論 25 707
  • 前言 學(xué)長(zhǎng)忙著找工作宴胧,今天幾輪筆試,把能拍到的筆試題都給我寫了寫表锻,我想對(duì)明年找工作或者實(shí)習(xí)有所幫助 第一題恕齐,去哪網(wǎng)...
    mrlevo520閱讀 4,366評(píng)論 6 47
  • 我在十月末的城南給你寫信。 秋天揉皺了枯黃的葉片浩嫌,搖落在沉寂的河流中檐迟,總有回家的人补胚,總有離岸的船码耐。 記不清是第...
    你蠻蠻蠻蠻好閱讀 379評(píng)論 1 1
  • 一 小黑的媽媽自打生下小黑那天就犯愁,孩子面皮黑黢黢的溶其,一點(diǎn)都不隨自己骚腥,全都隨孩子他爸了,將來(lái)娶媳婦難能找到像自己...
    寫意小生閱讀 511評(píng)論 1 0
  • 充滿眼光的中午淅淅瀝瀝下了一陣打傘的姑娘在水中走來(lái)走去一個(gè)熟悉的面孔出現(xiàn)嗨好久不見(jiàn) 恩轉(zhuǎn)身而去不如不見(jiàn)
    咕咕羊羊閱讀 145評(píng)論 0 0