LeetCode 93 Restore IP Addresses

LeetCode 93 Restore IP Addresses

Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:Given "25525511135",
return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)

看到題目躺苦,和combination或是subset非常像,都是數(shù)組組合問題祈匙,所以直接想到了backtracing!S瓢啊!然而問題來了,回溯的時(shí)候到底終止條件是什么赖条?循環(huán)條件又是什么H缧ⅰO芰ā!

真的被自己蠢哭了第晰,寫了兩遍都沒有寫對(duì)锁孟,發(fā)現(xiàn)是自己邏輯錯(cuò)誤。茁瘦。品抽。

終止條件不難,可以在回溯的時(shí)候傳輸一個(gè)segm變量代表當(dāng)前ip含有多少個(gè)segment了甜熔,當(dāng)ip已經(jīng)有4個(gè)segment時(shí)圆恤,即可添加到結(jié)果list中。

那在每次回溯時(shí)腔稀,到底到循環(huán)判斷多少個(gè)元素呢盆昙?!

對(duì)于permutaion和subset和combination來說烧颖,一般都是要循環(huán)遍歷整個(gè)數(shù)組(或字符串)弱左。但對(duì)于combination K,即從n個(gè)數(shù)中選出k個(gè)數(shù)不同的combination的題目炕淮,回溯終止條件變成了index==k拆火。

前面說了句廢話。涂圆。们镜。進(jìn)入正題,那到底需要循環(huán)判斷多少元素呢润歉。

對(duì)于一個(gè)ip模狭,它的segment最多只能有3位(0-255),因此在添加新的segment時(shí)踩衩,只需要考慮當(dāng)前index到index+2這3位數(shù)字即可=鲤摹7泛骸!

這里還有一個(gè)trick是锚赤,到底數(shù)組(或string)以及ip應(yīng)該怎么傳遞匹舞!
可以考慮每次傳入string的子串(去除當(dāng)前已經(jīng)考慮過的字符)。

代碼:

public class Solution {
    public List<String> restoreIpAddresses(String s) {
        List<String> combs = new ArrayList<>();
        if (s.length() < 4 || s.length() > 12) return combs;
        dfs(s, combs, "", 0, 0);
        return combs;
    }
    
    public void dfs(String s, List<String> combs, String addr, int segm, int index) {
        if (segm >= 3) {
            String seg = s.substring(index);
            if (isValidSeg(seg)) {
                String ip = addr + seg;
                combs.add(ip);
            }
            return;
        }
        
        for (int i = 1; i < 4 && index+i < s.length(); i++) {
            String seg = s.substring(index, index+i);
            if (isValidSeg(seg)) {
                String ip = addr + seg + ".";
                dfs(s, combs, ip, segm+1, index+i);
            }
        }
            
    }
    
    public boolean isValidSeg(String str) {
        if (str.charAt(0) == '0' && str.length() > 1) return false;
        else if (Integer.valueOf(str) > 255) return false;
        else return true;
    }
    
    public static void main(String[] args) {
        Solution solver = new Solution();
        String s1 = "25525511135";
        String s2 = "0000";
        for (String str : solver.restoreIpAddresses(s1)) {
            System.out.println(str);
        }
        for (String str : solver.restoreIpAddresses(s2)) {
            System.out.println(str);
        }
    }
    
    
}

參考
https://discuss.leetcode.com/topic/3919/my-code-in-java
https://discuss.leetcode.com/topic/53012/a-concise-and-easy-java-solution

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末线脚,一起剝皮案震驚了整個(gè)濱河市赐稽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌浑侥,老刑警劉巖姊舵,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異寓落,居然都是意外死亡括丁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門零如,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躏将,“玉大人,你說我怎么就攤上這事考蕾。” “怎么了会宪?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵肖卧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我掸鹅,道長(zhǎng)塞帐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任巍沙,我火速辦了婚禮葵姥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘句携。我一直安慰自己榔幸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布矮嫉。 她就那樣靜靜地躺著削咆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蠢笋。 梳的紋絲不亂的頭發(fā)上拨齐,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音昨寞,去河邊找鬼瞻惋。 笑死厦滤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的歼狼。 我是一名探鬼主播馁害,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蹂匹!你這毒婦竟也來了碘菜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤限寞,失蹤者是張志新(化名)和其女友劉穎忍啸,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體履植,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡计雌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玫霎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凿滤。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖庶近,靈堂內(nèi)的尸體忽然破棺而出翁脆,到底是詐尸還是另有隱情,我是刑警寧澤鼻种,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布反番,位于F島的核電站,受9級(jí)特大地震影響叉钥,放射性物質(zhì)發(fā)生泄漏罢缸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一投队、第九天 我趴在偏房一處隱蔽的房頂上張望枫疆。 院中可真熱鬧,春花似錦敷鸦、人聲如沸息楔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钞螟。三九已至,卻和暖如春谎碍,著一層夾襖步出監(jiān)牢的瞬間鳞滨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工蟆淀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拯啦,地道東北人澡匪。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像褒链,于是被迫代替她去往敵國(guó)和親唁情。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

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

  • Given a string containing only digits, restore it by retu...
    ShutLove閱讀 421評(píng)論 0 0
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)甫匹。 張土汪:刷leetcod...
    土汪閱讀 12,744評(píng)論 0 33
  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會(huì)員)甸鸟,僅算法題,的吐槽 https://leetc...
    蕾娜漢默閱讀 17,764評(píng)論 2 36
  • 在 Leetcode 看到很好的一篇總結(jié),所以我根據(jù)看到的再重新寫一篇,方便自己理解 首先理解一下什么是回溯,可以...
    taobit閱讀 2,090評(píng)論 1 2
  • 人性兵迅,缺失 種族抢韭,屠戮 一具具腐朽的身軀 在熊熊烈火中燃燒殆盡 漫天的灰燼伴著冰清的雪花 飄落在充滿苦惱的世界 屈...
    纖人淚閱讀 501評(píng)論 0 2