1. 程式人生 > >Leetcode No.93

Leetcode No.93

== 求解 str leet true class span 函數 style

給定一個只包含數字的字符串,復原它並返回所有可能的 IP 地址格式。

示例:

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

解答:遇到這種問題第一想到的就是用遞歸函數來求解。在這道題實際上也是可以這樣處理的。

遞歸函數邏輯如下:

【1】如果已經取到了四個字符且字符串已經被取完,那麽所取字符串符合要求,保存(為了加快速度,這裏采用 s.size()>(4-n)*3 一個判斷條件);

【2】依次提取字符串的前一個、前二個、前三個字符串,並轉化成十進制數字,判斷是否符合要求(如果所取字符數大於1那麽首字符不能為 ’0‘ );是則進行遞歸處理();

  void restoreIpAddressesHelper(string s,vector<string>&res,string out,int n)
{
    if(n==4 || s.size()>(4-n)*3)
    {
       if(s.empty()) res.push_back(out);
       return;
    }
    string num;
    for(int i=1;i<4;i++)
    {
        num = s.substr(0,i);
        if
(atoi(num.c_str())<256 && (i>1?num[0]!=0:true) && (int)s.size()>=i) restoreIpAddressesHelper(s.substr(i),res, out+(n==0?"":".")+num,n+1); } } //93 vector<string> restoreIpAddresses(string s) { vector<string> res; if(s.size()>12 || s.size()<4
) return res; string temp; restoreIpAddressesHelper(s,res,"",0); return res; }//93

Leetcode No.93