93. Restore IP Addresses 恢復(fù)IP地址

題目鏈接
tag:

  • Medium锌奴;

question:
??Given a string containing only digits, restore it by returning all possible valid IP address combinations.

Example:

Input: "25525511135"
Output: ["255.255.11.135", "255.255.111.35"]

思路:
??本題要求復(fù)原IP地址。IP地址由32位二進制數(shù)組成颅眶,為便于使用咒程,常以 XXX.XXX.XXX.XXX 形式表現(xiàn)五嫂,每組XXX代表小于或等于255的10進制數(shù)房官。所以說IP地址總共有四段切距,每一段可能有一位朽缎,兩位或者三位,范圍是[0, 255]谜悟,題目明確指出輸入字符串只含有數(shù)字话肖,所以當(dāng)某段是三位時,我們要判斷其是否越界(>255)葡幸,還有一點很重要的是最筒,當(dāng)只有一位時,0可以成某一段蔚叨,如果有兩位或三位時床蜘,像 00辙培, 01, 001邢锯, 011扬蕊, 000等都是不合法的,所以我們還是需要有一個判定函數(shù)來判斷某個字符串是否合法丹擎。這道題其實也可以看做是字符串的分隔問題尾抑,在輸入字符串中加入三個點,將字符串分為四段蒂培,每一段必須合法再愈,求所有可能的情況。
解法一:暴力搜索
??由于每段數(shù)字最多只能有三位护戳,而且只能分為四段翎冲,所以情況并不是很多,我們可以使用暴力搜索的方法灸异,每一段都循環(huán)1到3府适,然后當(dāng)4段位數(shù)之和等于原字符串長度時,我們進一步判斷每段數(shù)字是否不大于255肺樟,然后濾去不合要求的數(shù)字檐春,加入結(jié)果中即可,代碼如下:

class Solution {
public:
    vector<string> restoreIpAddresses(string s) {
        vector<string> res;
        for (int a=1; a<4; ++a) {
            for (int b=1; b<4; ++b) {
                for (int c=1; c<4; ++c) {
                    for (int d=1; d<4; ++d) {
                        if (a + b + c + d == s.size()) {
                            int A = stoi(s.substr(0, a));
                            int B = stoi(s.substr(a, b));
                            int C = stoi(s.substr(a + b, c));
                            int D = stoi(s.substr(a + b + c, d));
                            if (A <= 255 && B <= 255 && C <= 255 && D <= 255) {
                                string t = to_string(A) + "." + to_string(B) + "." + to_string(C) + "." + to_string(D);
                                if (t.size() == s.size() + 3) 
                                    res.push_back(t);
                            }
                        }
                    }
                }
            }
        }
        return res;
    }
};

解法二:遞歸
??我們用k來表示當(dāng)前還需要分的段數(shù)么伯,如果k = 0疟暖,則表示三個點已經(jīng)加入完成,四段已經(jīng)形成田柔,若這時字符串剛好為空俐巴,則將當(dāng)前分好的結(jié)果保存。若k != 0, 則對于每一段硬爆,我們分別用一位欣舵,兩位,三位來嘗試缀磕,分別判斷其合不合法缘圈,如果合法,則調(diào)用遞歸繼續(xù)分剩下的字符串袜蚕,最終和求出所有合法組合糟把,代碼如下:

class Solution {
public:
    vector<string> restoreIpAddresses(string s) {
        vector<string> res;
        helper(s, 4, "", res);
        return res;
    }
    
    void helper(string s, int k, string out, vector<string> &res) {
        if (k == 0) {
            if (s.empty())
                res.push_back(out);
        }
        else {
            for (int i=1; i<=3; ++i) {
                if (s.size() >= i && isValid(s.substr(0, i))) {
                    if (k == 1)
                        helper(s.substr(i), k - 1, out + s.substr(0, i), res);
                    else
                        helper(s.substr(i), k - 1, out + s.substr(0, i) + ".", res);
                }
            }
        }
    }
    
    bool isValid(string s) {
        if (s.empty() || s.size() > 3 || (s.size() > 1 && s[0] == '0'))
            return false;
        int res = atoi(s.c_str());
        return res <= 255 && res >= 0;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市牲剃,隨后出現(xiàn)的幾起案子遣疯,更是在濱河造成了極大的恐慌,老刑警劉巖凿傅,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缠犀,死亡現(xiàn)場離奇詭異数苫,居然都是意外死亡,警方通過查閱死者的電腦和手機辨液,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門文判,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人室梅,你說我怎么就攤上這事戏仓。” “怎么了亡鼠?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵赏殃,是天一觀的道長。 經(jīng)常有香客問我间涵,道長仁热,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任勾哩,我火速辦了婚禮抗蠢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘思劳。我一直安慰自己迅矛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布潜叛。 她就那樣靜靜地躺著秽褒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪威兜。 梳的紋絲不亂的頭發(fā)上销斟,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音椒舵,去河邊找鬼蚂踊。 笑死,一個胖子當(dāng)著我的面吹牛笔宿,可吹牛的內(nèi)容都是我干的犁钟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼措伐,長吁一口氣:“原來是場噩夢啊……” “哼特纤!你這毒婦竟也來了军俊?” 一聲冷哼從身側(cè)響起侥加,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粪躬,沒想到半個月后担败,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昔穴,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年提前,在試婚紗的時候發(fā)現(xiàn)自己被綠了吗货。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡狈网,死狀恐怖宙搬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拓哺,我是刑警寧澤勇垛,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站士鸥,受9級特大地震影響闲孤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烤礁,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一讼积、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧脚仔,春花似錦勤众、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凑兰,卻和暖如春掌桩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姑食。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工波岛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人音半。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓则拷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親曹鸠。 傳聞我的和親對象是個殘疾皇子煌茬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

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

  • 題目 Given a string containing only digits, restore it by r...
    時光雜貨店閱讀 228評論 0 1
  • IP地址的分類(記住) IP地址分為A類、B類眠屎、C類剔交、D類、E類改衩,規(guī)定如下: A類:網(wǎng)絡(luò)位8位岖常,主機位24位,網(wǎng)絡(luò)...
    Arya鑫閱讀 12,943評論 1 18
  • 個人認(rèn)為葫督,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記竭鞍,這雖然只是...
    貳零壹柒_fc10閱讀 5,055評論 0 8
  • 注入攻擊的分類 1.沒有正確過濾轉(zhuǎn)義字符 在用戶的輸入沒有為轉(zhuǎn)義字符過濾時,就會發(fā)生這種形式的注入式攻擊橄镜,它會被傳...
    查無此人asdasd閱讀 1,624評論 0 5
  • 正所謂笼蛛,一步錯,步步錯蛉鹿,從沒有死黨開始滨砍,到選擇采訪對象,因為采訪還沒有開始妖异,今天的作業(yè)注定是個劃水的作業(yè)惋戏,什么是劃...
    黑土錢閱讀 306評論 1 0