LeetCode[16] - Flattern 2D Vector

大概意思就是把2D list里面的element全部遍歷一遍。
注意啊偎球,一開始理解題意搞錯:我以為是必須要排序正確洒扎,所以上來就PriorityQueue+HashMap搞得無比復(fù)雜辑甜。其實,這個跟一個nxn的matrix遍歷袍冷,是沒區(qū)別的拉磷醋。
所有來個x,y,把2d list跑一變胡诗。

/*
Implement an iterator to flatten a 2d vector.

For example,
Given 2d vector =

[
  [1,2],
  [3],
  [4,5,6]
]
By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,2,3,4,5,6].

Hint:

How many variables do you need to keep track?
Two variables is all you need. Try with x and y.
Beware of empty rows. It could be the first few rows.
To write correct code, think about the invariant to maintain. What is it?
The invariant is x and y must always point to a valid point in the 2d vector. Should you maintain your invariant ahead of time or right when you need it?
Not sure? Think about how you would implement hasNext(). Which is more complex?
Common logic in two different places should be refactored into a common method.


Tags: Design
Similar Problems: (M) Binary Search Tree Iterator, (M) Zigzag Iterator, (M) Peeking Iterator

*/

/*
Thoughts:
As hint indicates: use 2 pointers to hold position.
Use hasNext to validate (x,y)  and move x.
Use next() to return (x,y) and move it(regardless of correctness, which is determined by hasNext())
*/
public class Vector2D {
    private int x;
    private int y;
    private List<List<Integer>> list;
    public Vector2D(List<List<Integer>> vec2d) {
        if (vec2d == null) {
            return;
        }
        this.x = 0;
        this.y = 0;
        this.list = vec2d;
    }

    public int next() {
        int rst = list.get(x).get(y);
        if (y + 1 >= list.get(x).size()) {
            y = 0;
            x++;
        } else {
            y++;
        }
        return rst;
    }

    public boolean hasNext() {
        if (list == null) {
            return false;
        }
        while (x < list.size() && list.get(x).size() == 0) {
            x++;
            y = 0;
        }
        if (x >= list.size()) {
            return false;
        }
        if (y >= list.get(x).size()) {
            return false;
        }
        return true;
    }
}

/**
 * Your Vector2D object will be instantiated and called as such:
 * Vector2D i = new Vector2D(vec2d);
 * while (i.hasNext()) v[f()] = i.next();
 */
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邓线,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子煌恢,更是在濱河造成了極大的恐慌褂痰,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件症虑,死亡現(xiàn)場離奇詭異缩歪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谍憔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門匪蝙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人习贫,你說我怎么就攤上這事逛球⊥狡拢” “怎么了充甚?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵蜕依,是天一觀的道長辜妓。 經(jīng)常有香客問我逢渔,道長汰具,這世上最難降的妖魔是什么卢佣? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任房揭,我火速辦了婚禮袜硫,結(jié)果婚禮上氯葬,老公的妹妹穿的比我還像新娘。我一直安慰自己婉陷,他們只是感情好帚称,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秽澳,像睡著了一般闯睹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上担神,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天楼吃,我揣著相機(jī)與錄音,去河邊找鬼。 笑死所刀,一個胖子當(dāng)著我的面吹牛衙荐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浮创,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼忧吟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了斩披?” 一聲冷哼從身側(cè)響起溜族,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎垦沉,沒想到半個月后煌抒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡厕倍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年寡壮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讹弯。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡况既,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出组民,到底是詐尸還是另有隱情棒仍,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布臭胜,位于F島的核電站莫其,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏耸三。R本人自食惡果不足惜乱陡,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吕晌。 院中可真熱鬧蛋褥,春花似錦、人聲如沸睛驳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乏沸。三九已至,卻和暖如春爪瓜,著一層夾襖步出監(jiān)牢的瞬間蹬跃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留蝶缀,地道東北人丹喻。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像翁都,于是被迫代替她去往敵國和親碍论。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

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

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗柄慰。 張土汪:刷leetcod...
    土汪閱讀 12,744評論 0 33
  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會員)鳍悠,僅算法題,的吐槽 https://leetc...
    蕾娜漢默閱讀 17,778評論 2 36
  • java筆記第一天 == 和 equals ==比較的比較的是兩個變量的值是否相等坐搔,對于引用型變量表示的是兩個變量...
    jmychou閱讀 1,497評論 0 3
  • 概述 Java集合框架由Java類庫的一系列接口藏研、抽象類以及具體實現(xiàn)類組成。我們這里所說的集合就是把一組對象組織到...
    absfree閱讀 1,254評論 0 10
  • leetcode刷題記錄本文記錄一下leetcode刷題記錄概行,記錄一下自己的解法和心得蠢挡。 LeetCode Two...
    EarthChen閱讀 3,462評論 0 6