# 93. Restore IP Addresses

Given a string containing only digits, restore it by returning all possible valid IP address combinations.

Example:

Input: "25525511135"
Output: ["255.255.11.135", "255.255.111.35"]

# Solution

Approach 1: Recursion.

# Code (Python)

Approach 1:

# Code (C++)

Approach 1:

class Solution {
private:
    vector<string> IPs;
    void doRestoreIpAddresses(string s, int head, int level, string buf) {
        if (head >= s.size() || level == 4)
        {
            if (head == s.size() && level == 4)
                IPs.push_back(buf.substr(0, buf.size() - 1));
            return;
        }
        doRestoreIpAddresses(s, head + 1, level + 1, buf + s[head] + '.');
        if (s[head] == '0')
            return;
        if (head < s.size() - 1)
            doRestoreIpAddresses(s, head + 2, level + 1, buf + s.substr(head, 2) + '.');
        if (head < s.size() - 2 &&
            (s[head] < '2' ||
             s[head] == '2' && s[head+1] < '5' ||
             s[head] == '2' && s[head+1] == '5' && s[head+2] <= '5'))
            doRestoreIpAddresses(s, head + 3, level + 1, buf + s.substr(head, 3) + '.');
    }
public:
    vector<string> restoreIpAddresses(string s) {
        doRestoreIpAddresses(s, 0, 0, "");
        return IPs;
    }
};