93.leetcode Restore IP Addresses(medium)[回溯 DFS]

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有4个段,每个段的字符个数可能是1,2,3,因此对每一段循环取1,2,3,然后标记当前是对应的IP段的哪个段,直到IP端已经分为4个段并且取完了string这个时候取到一个合法的ip放入最后的结果中。对每次处理的时候如果按照每次取i个字符处理之后,调用递归取后面的段之后需要把前面的取i得到的字符串去掉,因为如果这里取的满足条件那么后面一定已经存放到结果中。现在需要新起一个开头处理。

class Solution {
public:
  bool validIP(string digit)
    {
        int n = digit.size();
        if(n>1)
        {
            if(digit[0] == '0')
               return false;
        }
        const char *chara = digit.c_str();
        int num = atoi(chara);
        if(num>=0 && num<=255)
           return true;
        else 
           return false;
    }
    
    void getIP(string &s,int start,int drag,string &mid,vector &result)
    {
    	if(drag == 4)
    	{
            //cout< restoreIpAddresses(string s) {
        int len = s.size();
        vector result;
        if(len>12 || len<4) return result;
        string mid;
        getIP(s,0,0,mid,result);
        return result;
    }
};



你可能感兴趣的:(C++学习)