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

    解题思路:

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

    核心的地方是: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;
        }
    };
  • 相关阅读:
    HDU 1076 An Easy Task
    299 Train Swapping
    HDU 1092 A+B for InputOutput Practice (IV)
    HDU 1093 A+B for InputOutput Practice (V)
    HDU 1049 Climbing Worm
    HDU 1032 The 3n + 1 problem
    HDU 1089 A+B for InputOutput Practice (I)
    HDU 1091 A+B for InputOutput Practice (III)
    Vimperator
    成为高效程序员的搜索技巧[转自月光博客]
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9162124.html
Copyright © 2020-2023  润新知