码迷,mamicode.com
首页 > 其他好文 > 详细

93. Restore IP Addresses

时间:2018-06-10 11:53:33      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:size   开头   string   temp   amp   rest   art   核心   ip地址   

问题描述:

 

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"]

 

解题思路:

这个就是枚举并且判断是否是有效的。

核心的地方是:IP地址有4各部分,每个部分都要小于256,即[0, 255]。

我们可以从以下几个地方入手:

1.当前剩余字符串长度是否超过所给的最大长度? (1,2,3,4)

  每个部分最长为3,若在对第1部分进行枚举,剩下的长度如果超过了3*3那么显然是不可能的

2.当前部分字符串传承数字后的值是否在有效范围内?

需要注意的是:

  若当前字符串长度大于1且开头为0,是无效的:如01

 

代码:

class Solution {
public:
    vector<string> restoreIpAddresses(string s) {
        vector<string> ret;
        int len = s.size();
        if(len > 12)
            return ret;
        enumerate(ret, s, 4, "");
        return ret;
    }
private:
    void enumerate(vector<string> &ret, string s, int part, string cur){
        if(part == 1){
            if(validAdd(s)){
                cur += s;
                ret.push_back(cur);
            }
            return;
        }
        for(int i = 1; i <= 3 && i < s.size(); i++){
            string temp = cur;
            string add = s.substr(0, i);
            if(validAdd(add)){
                temp += add+".";
                string rest = s.substr(i);
                if(rest.size() <= ((part-1)*3))
                    enumerate(ret, rest, part-1, temp);
            }
        }
    }
    
    bool validAdd(string s){
        if(s.size() > 3)
            return false;
        if(s.size() > 1 && s[0] == 0)
            return false;
        int num = 0;
        for(int i = 0; i < s.size(); i++){
            num *= 10;
            num += s[i]-0;
        }
        return num < 256;
    }
};

 

93. Restore IP Addresses

标签:size   开头   string   temp   amp   rest   art   核心   ip地址   

原文地址:https://www.cnblogs.com/yaoyudadudu/p/9162124.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!