復原IP位址

2022-08-04 08:39:10 字數 1601 閱讀 4920

題目描述

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

有效的 ip 位址正好由四個整數(每個整數字於 0 到 255 之間組成),整數之間用 '.' 分隔。

示例

輸入: "25525511135"

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

遞迴方法

需要找出所有可能復原的ip位址,因此可以考慮使用遞迴的方法,對所有可能的字串分割方法進行搜尋,並篩選出滿足要求的作為答案

假設題目中給出的字串為s,使用遞迴函式dfs(segid,segstart)表示從s[segstart]的位置開始,搜尋ip位址中的第segid段,其中segid∈。由於ip欄位都為0-255的整數,因此從segstart開始,從小到大依次列舉當前這一段ip位址的階數字置segend。如果滿足要求,就遞迴的進行下一段搜尋,呼叫遞迴函式dfs[segid+1,segend+1].

特殊情況

由於ip位址的每一段不能有前導0,如果s[segstart]等於字元0,那麼ip位址的第segid段只能為0

在遞迴搜尋的過程中,如果已經得到了全部的4段ip位址(即segid= 4),並且遍歷完了整個字串(即segstart= |s|,其中|s|表示字串s的長度),那麼此時就是要求的答案之一,將其加入答案。在其他時刻,如果提前遍歷完了字串,需要結束遍歷,回溯到上一步。

class solution 

}ans.push_back(move(ipaddr));

}return ;

}//如果還沒有找到4段ip位址就遍歷完了字串,那麼提前回撤

if(segstart == s.size())

//由於不能有前導0,如果當前數字為0,那麼這段ip位址只能為0

if(s[segstart] =='0')

//一般情況

int addr = 0;

for(int segend = segstart;segend < s.size();segend++)

else}}

vectorrestoreipaddresses(string s)

};

知識小講堂:

c++ 11 std::move()

是將物件的狀態或者所有權從乙個物件轉移到另乙個物件,只是轉移,沒有記憶體的搬遷或者記憶體拷貝,它就是為效能而生

c++ to_string()

功能就是將數值轉換成字串,返回對應的字串

vector容器的resize()方法

作用是改變vector容器中元素的數目

vector容器的reserve()方法

作用是設定容器的容量

復原IP位址

給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。示例 輸入 25525511135 輸出 255.255.11.135 255.255.111.35 class solution public void help string sub string cur,listres int ...

復原IP位址

問題描述 給定乙個只包含數字的字串,復原它 在中間插入點號 並返回所有可能的 ip 位址格式,輸出可能的格式的數量。有效的 ip 位址正好由四個整數 每個整數字於 0 到 255 之間 組成,整數之間用 分隔。輸入說明 輸入乙個只包含數字的字串 輸出說明 輸出乙個整數 輸入範例 2552551113...

114 復原IP位址

示例 輸入 25525511135 輸出 255.255.11.135 255.255.111.35 遞迴 回溯 public listrestoreipaddresses string s sb是乙個臨時結果,當其滿足條件時,才會被加入到最終的list中.stringbuilder sb new ...