Restore IP Addresses

来源:互联网 发布:php招聘要求 编辑:程序博客网 时间:2024/05/16 02:38

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)

1.我的答案 回溯

class Solution {public:   void split(vector<string>&res, string s, vector<string>& vec, int num){    int len = s.size();    if(num == 0 && len > 0 && len < 4){        if(s.size()>1 && s[0] == '0')        return;        else{        int temp = atoi(s.c_str());        if(temp <=255 && temp >=0){            string sres = vec[0]+"."+vec[1]+"."+vec[2]+"."+s;            res.push_back(sres);            return;            }        }    }    int i = 1;    while(i <=3 && i < len){        string stemp = s.substr(0,i);        if(stemp.size()>1 && stemp[0] == '0'){//用来判断是否有“010”这种情况出现,出现就删掉            ++i;            continue;        }        else{        int sint = atoi(stemp.c_str());        if(sint <= 255 && sint >=0){            vec.push_back(stemp);            string str2 = s.substr(i,len-i);            split(res,str2,vec,num-1);            vec.pop_back();        }        }       ++i;     }    return;}vector<string> restoreIpAddresses(string s) {    vector<string>res,vec;    int num = 3;    int len = s.size();    if(len < 4 || len > 12)        return res;    split(res,s,vec,num);    return res;}};

2.别人的答案,时间一样,就是比我的要整洁

class Solution {public:    vector<string> restoreIpAddresses(string s) {        vector<string> result;        string ip;        dfs(s,0,0,ip,result); //paras:string s,start index of s,step(from0-3),intermediate ip,final result        return result;    }    void dfs(string s,int start,int step,string ip,vector<string>& result){        if(start==s.size()&&step==4){            ip.erase(ip.end()-1); //remove the last '.' from the last decimal number            result.push_back(ip);            return;        }        if(s.size()-start>(4-step)*3) return;        if(s.size()-start<(4-step)) return;        int num=0;        for(int i=start;i<start+3;i++){            num=num*10+(s[i]-'0');            if(num<=255){                ip+=s[i];                dfs(s,i+1,step+1,ip+'.',result);            }            if(num==0) break;        }    }};


0 0
原创粉丝点击