leetcode || 93、 Restore IP Addresses

problem:

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)

Hide Tags
  Backtracking String
题意:给定一个纯数字的字符串,输出其满足IP格式要求的IP地址

thinking:

(1)IP格式要求:4段,每段位数最多3位,数值0~255,最少1位,1位可以为0,但是2 、3位时不能以0开头

(2)要输出IP,所以采用DFS深搜,深搜步数是固定的4步,每次可以获取字符串的1~3位来搜索。


code:

class Solution {
private:
    vector<string> ret;
public:
    vector<string> restoreIpAddresses(string s) {\
        int n=s.size();
        string str;
        dfs(1,0,0,n,s,str);
        dfs(1,0,1,n,s,str);
        dfs(1,0,2,n,s,str);
        return ret;

    }
protected:
    void dfs(int step, int start, int end, int size,string s, string str)
    {
        if(end>=size)
            return;
        if(step==4)
        {
            if(end==size-1)
            {
                string tmp=s.substr(start,end-start+1);
                if(check(tmp))
                    ret.push_back(str+tmp);
            }
            return;
        }
            string tmp=s.substr(start,end-start+1);
            if(check(tmp))
            {
                str=str+tmp+".";
                dfs(step+1,end+1,end+1,size,s,str);
                dfs(step+1,end+1,end+2,size,s,str);
                dfs(step+1,end+1,end+3,size,s,str);
            }

    }
bool check(string &str)
    {
        int n=str.size();
        if(n<1 || n>3)
            return false;
        if(n==1)
                return true;
        if(n==2)
        {
            if(str.at(0)=='0')
                return false;
            else
                return true;
        }
        if(n==3)
        {
            if(str.at(0)=='0')
                return false;
            if(str>string("255"))
                return false;
            else
                return true;
        }

    }
};


你可能感兴趣的:(LeetCode,String,IP,DFS,回溯法)