Leetcode 93 Solution

This article provides solution to leetcode question 93 (restore-ip-addresses)

https://leetcode.com/problems/restore-ip-addresses

Solution

class Solution {
    vector<string> m_res;

public:
    void restoreIpAddresses(const string& s, int i, vector<int>& ip)
    {
        if (ip.size() == 4 && i < s.size())
            return;

        if (i == s.size())
        {
            if (ip.size() == 4)
            {
                string ipstr = to_string(ip[0]) + "." + to_string(ip[1]) + "." + to_string(ip[2]) + "." + to_string(ip[3]);
                m_res.push_back(ipstr);
            }

            return;
        }

        if (s[i] == '0')
        {
            ip.push_back(0);
            restoreIpAddresses(s, i + 1, ip);
            ip.pop_back();
        }
        else
        {
            for (int j = i; j < s.size(); j++)
            {
                int val = atoi(s.substr(i, j - i + 1).c_str());

                if (val >= 256)
                    break;

                ip.push_back(val);
                restoreIpAddresses(s, j + 1, ip);
                ip.pop_back();
            }
        }
    }

    vector<string> restoreIpAddresses(string s) {
        vector<int> ip;
        restoreIpAddresses(s, 0, ip);
        return m_res;
    }
};