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)

class Solution {
public:
    void visit(string &s, int num, int len, int begin, vector<string> &result, int *dotPos)
    {
	    if (begin >= len)
	    {
		    return;
	    }

	    if (num == 3)
	    {
		    if (len-begin > 3 || (len-begin != 1 && s[begin] == '0') 
			    || (len-begin == 3 && s.substr(begin, 3) > "255"))
		    {
			    return;
		    }

		    string temp;
		    int left = 0;
		    for (int i = 0; i < 3; i++)
		    {
			    temp += s.substr(left, dotPos[i]-left) + '.';
			    left = dotPos[i];
		    }
		    temp += s.substr(left, len-left);
		    result.push_back(temp);
		    return;
	    }
	    else
	    {
		    for (int i = 1; i < 4; i++)
		    {
			    if (begin+i >= len)
			    {
				    continue;
			    }
			    if ((i != 1) && s[begin] == '0'|| (i == 3 && s.substr(begin, 3) > "255"))
			    {
				    continue;
			    }
			    dotPos[num] = begin + i;
			    visit(s, num+1, len, dotPos[num], result, dotPos);
		    }
	    }
    }
    
    vector<string> restoreIpAddresses(string s) {
        vector<string> result;
	    int len = s.length();
	    if (len < 4 || len > 12)
	    {
		    return result;
	    }

	    int dotPos[3];
	    visit(s, 0, len, 0, result, dotPos);

	    return result;
    }
};


你可能感兴趣的:(Restore IP Addresses)