[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;
        }
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章