Restore IP Addresses

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;
    }




原文地址:https://www.cnblogs.com/wzjhoutai/p/6811284.html