首页 > 其他 > 详细

93.Restore IP Addresses(Recursion)

时间:2015-10-05 10:22:44      阅读:313      评论:0      收藏:0      [点我收藏+]

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)

class Solution {
public:
    vector<string> restoreIpAddresses(string s) {
        result.clear();
        dfs(s, 0, 0);
        return result;
    }
    void dfs(string s, int startPos, int depth)
    {
        if (depth ==3) //IP地址最多4段
        {
            string str = s.substr(startPos,s.length()-startPos);
            int restStrLen = str.length();
            int n = atoi(str.c_str());
            if(n>255) return; //每段8bit,所以最大值是2^8=255
            if(restStrLen > 1 && s[startPos]==0) return; //每段可以=0,但若!=0,则不能以0开始
            result.push_back(s);
        }
        else
        {       
            string str = s.substr(startPos,s.length()-startPos);
            int restStrLen = str.length();
            if(restStrLen>=4-depth) //每段至少有一个数字
            {         
                str = s.substr(0,startPos+1)+"."+s.substr(startPos+1,restStrLen-1);
                dfs(str, startPos+2, depth+1); //该段只有1个字符的情况
                if(s[startPos] == 0) return;
            }
            if(restStrLen>=5-depth)
            {
                str = s.substr(0,startPos+2) +"."+s.substr(startPos+2,restStrLen-2);
                dfs(str, startPos+3, depth+1); //该段有2个字符的情况
            }
            if(restStrLen>=6-depth) //该段有3个字符的情况
            {
                str =  s.substr(startPos,3);
                int n = atoi(str.c_str());
                if(n>255) return;
                str = s.substr(0,startPos+3)+"."+s.substr(startPos+3,restStrLen-3);
                dfs(str, startPos+4, depth+1);
            }
        }
    }
private:
    vector<string> result;
};

 

93.Restore IP Addresses(Recursion)

原文:http://www.cnblogs.com/qionglouyuyu/p/4855372.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!