93. 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)

Subscribe to see which companies asked this question

代码分析:

利用回溯算法,对于ip地址的每一段,每一次都从最短的长度开始取(从1到4)。注意数字从str转换成int需要减去48.我在这个点上绕了好久。以后一定要多注意。

此外,int转换为str好像是to_string(?)我也忘了。

什么是正确的ip地址我也比较迷茫。所以判断的方法写的比较乱。

代码:

class Solution {
public:
    bool check(int num ,string s)
    {
        if((num==0 && s.size()>1)||num>255||(s[0]=='0'&&num!=0)) return false;
        return true;
    }

    void Ipbuild(int k, string s,string s1,int t ,vector& v1)
    {

        if(k==4 &&(t==s.size())){ v1.push_back(s1);}
        else if(k<4)
        {
            string s2="";
            int num=0;
            for(int i=t;i             {
               num=num*10+(int(s[i])-48);
               s2+=s[i];
               if(check(num,s2)){Ipbuild(k+1,s,s1+'.'+s2,i+1,v1);}
            }
        }
    }
    vector restoreIpAddresses(string s) {
        vector v1;
        if(s.size()<4 || s.size()>12) return v1;
        int num=0;
        string s1="";
        for(int i=0;i         {
            num=num*10+(int(s[i])-48);
            s1=s1+s[i];
            if(check(num,s1)){Ipbuild(1,s,s1,i+1,v1);}
        }
        return v1;
    }
};

你可能感兴趣的:(Leetcode,算法)