LeetCode題解 93 復原IP位址

2021-09-26 09:02:21 字數 1265 閱讀 1823

給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。

示例:輸入: "25525511135"

輸出: ["255.255.11.135", "255.255.111.35"]

010.001.00.000這種是不可以出現的,即不可出現2位數&&0開頭

單個區間內最大值為255,因為 ip總的位數為24位,每個區間為8位,最大值為2^8 - 1

使用回溯演算法,依次按長度為1到3分割字元,index記錄在s內的索引,cnt記錄當前區間,若cnt超過4則表示越界分配失敗,在遞迴的入口還可以通過簡單的乘法剪枝(即如果在最大位數和最小位數之間則不用測試分配)

用 " . "+string 比 string +" . "比較容易回溯,前者找出" . "的索引往後刪除即可(剛開始用string +" . "經常出bug)

這題裡面的細節特別多,通過比較費時間

class solution 

void getip(stringbuilder sb,string s, int index, int cnt)

int tmp =0;

string sub = null;

//點'.'的位置

int pointindex =-1;

if(cnt == 4)

tmp = integer.parseint(sub);

//越界超過255

if(tmp>255)

ret.add(new string(sb));

//pointindex記錄回滾位置

pointindex = sb.lastindexof(".");

//回滾

sb = sb.delete(pointindex,sb.length());

return ;

}for(int i=1 ; i<=3 ; i++)

sub = s.substring(index,index+i);

//以0開頭的多位數字是無效

if(sub.length()!=1 && sub.charat(0)=='0')

tmp = integer.parseint(sub);

if(tmp<=255)else

getip(sb,s,index+i,cnt+1);

pointindex = sb.lastindexof(".");

//若區間為1則sb中無"."存在,回滾至0;

if(pointindex==-1)else}}

}}

LeetCode93 復原IP位址

首先需要知道ip位址的特性,總共有四段,每段的取值都在 0,255 之間,四段之間用3個 隔開。目標就是如何放置這3個分隔符,使得ip位址是合法的,然後把合法的ip位址記錄下來。方法一 暴力解法。四段的長度都有取1 3的可能性,遍歷所有的情況,記錄合法ip位址。當然類似000,001,00,010這...

leetcode 93 復原IP位址

先判斷字串字串長度是否處於 4,12 然後判斷字串將字串分成從ip位址的第一位進行選擇 ip位址每一位最大為255 最小為0 ip位址的每一位所包含的字串中的位數分別是1 2 3 位 ip位是三位時,要判斷是否大於255 void restore std vector a,std string s,...

LeetCode 93 復原IP位址

給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。示例 輸入 25525511135 輸出 255.255.11.135 255.255.111.35 只用確認三個點的位置就可以了,所以用三個迴圈來確定點的位置,如果太大了直接continue,如果乙個長度不是1的部分頭部是0,也co...