Restore IP Addresses

来源:互联网 发布:影片制作软件 编辑:程序博客网 时间:2024/06/11 03:27

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)

解:

主要思想:采用递归的方式,一个一个的加入到最后的ip中

void formIpAddr(vector<string>&ret, string curIp, string nums, int idxIp){        if(idxIp==1){            if(nums.size()>3 || (nums.size()>1&&nums[0]=='0')){                return ;            }            const char * data=nums.c_str();            if(nums.size()<=2||atoi(data)<=255){                ret.push_back(curIp+nums);                return;            }        }        else{            if(nums[0]=='0'){                string tmp=curIp+nums.substr(0,1)+".";                formIpAddr(ret, tmp, nums.substr(1), idxIp-1);                return;            }            else{                int i;                string tmp;                for(i=0; i<2 && i+idxIp<=nums.size(); i++){                    tmp=nums.substr(0, i+1);                    formIpAddr(ret, curIp+tmp+".", nums.substr(i+1), idxIp-1);                }                if(i+idxIp<=nums.size()){                    const char * data=nums.substr(0,i+1).c_str();                    tmp=nums.substr(0, i+1);                    if(atoi(data)<=255)                        formIpAddr(ret, curIp+tmp+".", nums.substr(i+1), idxIp-1);                }            }        }            }    vector<string> restoreIpAddresses(string s) {        vector<string> ret;        if(s.size()<4)            return ret;        string curIp="";                formIpAddr(ret, curIp, s, 4);        return ret;    }




0 0
原创粉丝点击