39. Combination Sum

2017/07/23 Update

今天做這題發(fā)現(xiàn)這種for+遞歸并不是我想象的n*n模型兰迫,第二個n是堆棧深度弱卡,完全取決于你什么時候return峦阁,如果不return就會stackOverFlow辆飘。N queens是N*N因為人為制定了終止條件是n龄捡。


這題第一次做還是去年了卓嫂。。Intellij里顯示著:Created by DrunkPiano on 2016/12/30. 那時候還沒有寫簡書聘殖,這里補上晨雳。
轉(zhuǎn)眼已經(jīng)4個月過去了。第一次寫這題時候的心情郁悶死了就斤,根本不知道dfs干嘛悍募,恢復(fù)現(xiàn)場干嘛。洋机。練習(xí)真是有用的坠宴,我現(xiàn)在有種感覺就是無論做什么事情只有你在上面花了工夫了才會出點成果,比如彈吉他绷旗,再沒有天分的人 天天練的話也能練好一首曲子喜鼓。但是還有些例外,就是同樣是投入練習(xí)衔肢,有的人會彈得好庄岖,有的人會彈得差;打dota也一樣角骤,有的人打了幾年還是菜雞隅忿,這就不僅僅是練習(xí)了心剥,如果除去天分的話,影響成果的就是練習(xí)的方法背桐,比如是否善于總結(jié)优烧,會不會對某個點進行針對性訓(xùn)練等等。

再寫這道題的時候思路很清楚链峭,用全排列(permuattions)的那種一層層遞歸的套路畦娄。但是漏掉了一個問題,就是忘記讓for的初始值再進入下一層的時候不能從自己之前的數(shù)開始弊仪,否則就duplicated了熙卡,例如這樣一個case:

Input:
[2,3,6,7]
7
Output:
[[2,2,3],[2,3,2],[3,2,2],[7]]
Expected:
[[2,2,3],[7]]

這題跟N皇后其實有相似之處,最終都會形成一個n * n的matrix的遍歷形式励饵,很清晰的DFS驳癌,為什么要讓i = start也很清楚:

DFS

最后貼下代碼,注意
if(i>0 && candidates[i] == candidates[i-1]) continue;這句可以把提高一些速度曲横。

    List<List<Integer>> result = new ArrayList<>();

    public List<List<Integer>> combinationSum(int[] candidates, int target) {

        if (candidates == null || candidates.length == 0) return result;
        dfs(target, new ArrayList<Integer>(), candidates , 0);
        return result;
    }

    private void dfs(int target, List<Integer> item, int[] candidates, int start) {

        if (target < 0) return;
        if (target == 0) {
            result.add(new ArrayList<>(item));
            return;
        }
        for (int i = start; i < candidates.length; i++) {
    //         //加上下面這句對結(jié)果沒有影響喂柒,但會減少很多次循環(huán),因為同一個數(shù)字可以復(fù)用(每次從i開始)禾嫉,所以重復(fù)數(shù)字就沒有意義了
             if(i>0 && candidates[i] == candidates[i-1]) continue;
            item.add(candidates[i]);
            dfs(target - candidates[i], item, candidates, i);
            item.remove(item.size() - 1);
        }
    }

對于Combination SumII, 除了能想到下一層從start + 1 開始之外灾杰,還是有幾點需要注意的,具體可以去那篇看看熙参。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艳吠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子孽椰,更是在濱河造成了極大的恐慌昭娩,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黍匾,死亡現(xiàn)場離奇詭異栏渺,居然都是意外死亡,警方通過查閱死者的電腦和手機锐涯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門磕诊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纹腌,你說我怎么就攤上這事霎终。” “怎么了升薯?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵莱褒,是天一觀的道長。 經(jīng)常有香客問我涎劈,道長广凸,這世上最難降的妖魔是什么阅茶? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮炮障,結(jié)果婚禮上目派,老公的妹妹穿的比我還像新娘。我一直安慰自己胁赢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布白筹。 她就那樣靜靜地躺著智末,像睡著了一般。 火紅的嫁衣襯著肌膚如雪徒河。 梳的紋絲不亂的頭發(fā)上系馆,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機與錄音顽照,去河邊找鬼由蘑。 笑死,一個胖子當(dāng)著我的面吹牛代兵,可吹牛的內(nèi)容都是我干的尼酿。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼植影,長吁一口氣:“原來是場噩夢啊……” “哼裳擎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起思币,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤鹿响,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谷饿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惶我,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年博投,在試婚紗的時候發(fā)現(xiàn)自己被綠了绸贡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡贬堵,死狀恐怖恃轩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情黎做,我是刑警寧澤叉跛,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蒸殿,受9級特大地震影響筷厘,放射性物質(zhì)發(fā)生泄漏鸣峭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一酥艳、第九天 我趴在偏房一處隱蔽的房頂上張望摊溶。 院中可真熱鬧,春花似錦充石、人聲如沸莫换。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拉岁。三九已至,卻和暖如春惰爬,著一層夾襖步出監(jiān)牢的瞬間喊暖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工撕瞧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留陵叽,地道東北人。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓丛版,卻偏偏與公主長得像巩掺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子硼婿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,781評論 2 361

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