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)

Solution1:Brute Force

思路:循環(huán)列舉出所有的可能性并check是否valid
Note:Brute Force: systematically enumerating all possible candidates for the solution and checking whether each candidate satisfies the problem's statement.
Time Complexity: O(3^4) Space Complexity: O(1) 不算結(jié)果

Solution2:回溯(DFS)寫法

思路: backtrack出每一種組合钮惠,并check if valid规肴。(這里采用建立tmp string, so no remove here缺猛;或用同一內(nèi)存的string +后再remove也可以中姜。兩種具體寫法方式)
另外,CodeChange: String改用StringBuilder更好
Note:其實(shí)DFS也是一種Brute Force薯演,只不過寫法上更specific撞芍,含有path depth概念
Time Complexity: O(3^4) Space Complexity: O(1) 不算結(jié)果

Solution1 Code:

class Solution1 {
    public List<String> restoreIpAddresses(String s) {
        List<String> res = new ArrayList<String>();
        int len = s.length();
        for(int i = 1; i<4 && i<len-2; i++){
            for(int j = i+1; j<i+4 && j<len-1; j++){
                for(int k = j+1; k<j+4 && k<len; k++){
                    String s1 = s.substring(0,i), s2 = s.substring(i,j), s3 = s.substring(j,k), s4 = s.substring(k,len);
                    if(isValid(s1) && isValid(s2) && isValid(s3) && isValid(s4)){
                        res.add(s1+"."+s2+"."+s3+"."+s4);
                    }
                }
            }
        }
        return res;
    }
    public boolean isValid(String s){
        if(s.length()>3 || s.length()==0 || (s.charAt(0)=='0' && s.length()>1) || Integer.parseInt(s)>255)
            return false;
        return true;
    }
}

Solution2 Code:

class Solution2 {
    public List<String> restoreIpAddresses(String s) {
        List<String> solutions = new ArrayList<String>();
        restoreIp(s, solutions, 0, "", 0);
        return solutions;
    }

    private void restoreIp(String ip, List<String> solutions, int idx, String restored, int count) {
        if (count > 4) return;
        if (count == 4 && idx == ip.length()) solutions.add(restored);

        for (int i=1; i<4; i++) {
            if (idx+i > ip.length()) break;
            String s = ip.substring(idx,idx+i);
            if ((s.startsWith("0") && s.length()>1) || (i==3 && Integer.parseInt(s) >= 256)) continue;
            restoreIp(ip, solutions, idx+i, restored+s+(count==3?"" : "."), count+1);
        }
    }
}
最后編輯于
?著作權(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)容