[leetcode] 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)
题意:
给定一个字符串,代表了IP地址,现在需要返回所有的合法的IP地址。
思路:
我们知道IP地址可以用点分十进制表示,而每一个点区分开来的是八个bit的数字,八个bit的数字的范围是[0,255],所以比如保证这四个数字每个数字都是在这个范围内,另外需要保证的是不要出现01这种数字,0只能单独作为一个十进制数,或者跟在其他数后面,0不能出现在十进制数的开头,并且这个十进制还超过一位。
以上。
代码如下:

class Solution {
public:
    vector<string> restoreIpAddresses(string s) {
        vector<string> result;
        vector<string> temp;
        getIP(result, s, 0, 0, temp, s.length());
        return result;
    }

    void getIP(vector<string>& result, string& s, int i, int j, vector<string>& temp, int strLen) {
        if (i == strLen) {
            if (j == 4) {
            string st = "";
            for (int k = 0; k < 3; k++) {
                st += temp[k] + ".";
            }
            st += temp[3];
            result.push_back(st);
            }
            return;
        }
        else if (j == 4)return;
        for (int k = 1; k <= strLen - 3 + j - i; k++) {
            if (k > 1 && s[i] == '0')break;
            string sub = s.substr(i, k);
            if (atoi(sub.c_str()) <= 255) {
            temp.push_back(sub);
            getIP(result, s, i + k, j + 1, temp, strLen);
            temp.pop_back();
            }
            else break;
        }
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章