93. Restore IP Addresses

Posted xxinn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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"]

【题意】

给出一个string,返回符合要求的IP地址的集合。

IP地址的每一个段范围是0-255,一共有四段,除值为0外,不能以0开头。

【解答】

使用递归,按照要求生成符合条件的段的集合。

BFS和DFS每一个node只有一遍,所以时间复杂度是O(n)。带了其他算法的可能是O(nloge)。

这题感觉是O(n * n)。

class Solution {
public:
    vector<string> restoreIpAddresses(string s) {
        return getStrs(3, s);
    }
    
    vector<string> getStrs(int n, string s){
        int len = s.length();
        vector<string> res;
        if(n > len - 1 ) return res;
        if(n == 0){
            int value = 0;
            for(int i=0; i<len; i++){
                value = value * 10 + s[i] - 0;
            }
            if(s[0] == 0 && len == 1){
                res.push_back(s);
            }
            if(s[0]!=0 && value >=0 && value<=255){
                res.push_back(s);
            }
            return res;
        }
        string str = "";
        int value = 0;
        for(int i=0; i<len && i<3; i++){
            str += s[i];
            value = 10 * value + (s[i] - 0);
            if(value >= 0 && value <= 255){
                string temp = str + ".";
                string nextStr = "";
                for(int j=i+1; j<len; j++)
                    nextStr += s[j];
                vector<string> nextStrs = getStrs(n-1, nextStr);
                for(int j=0; j<nextStrs.size(); j++){
                    temp += nextStrs[j];
                    res.push_back(temp);
                    temp = str + ".";
                }
            }
            if(i==0 && s[i] == 0) break;
        }
        return res;
    }
};

 

以上是关于93. Restore IP Addresses的主要内容,如果未能解决你的问题,请参考以下文章

93. Restore IP Addresses

93. Restore IP Addresses

93. Restore IP Addresses

93. Restore IP Addresses

93. Restore IP Addresses

Leetcode 93. Restore IP Addresses