• [LintCode] Restore IP Address 复原IP地址


    Given a string containing only digits, restore it by returning all possible valid IP address combinations.

    Example

    Given "25525511135", return

    [
      "255.255.11.135",
      "255.255.111.35"
    ]
    

    Order does not matter.

    LeetCode上的原题,请参见我之前的博客Restore IP Addresses

    解法一:

    class Solution {
    public:
        /**
         * @param s the IP string
         * @return All possible valid IP addresses
         */
        vector<string> restoreIpAddresses(string& s) {
            vector<string> res;
            helper(s, 4, "", res);
            return res;
        }
        void helper(string s, int k, string out, vector<string>& res) {
            if (k == 0) {
                if (s.empty()) res.push_back(out);
                return;
            } 
            for (int i = 1; i < 4; ++i) {
                if (s.size() < i) break;
                int val = stoi(s.substr(0, i));
                if (val > 255 || i != to_string(val).size()) continue;
                helper(s.substr(i), k - 1, out + s.substr(0, i) + (k == 1 ? "" : "."), res);
            }
        }
    };

    解法二:

    class Solution {
    public:
        /**
         * @param s the IP string
         * @return All possible valid IP addresses
         */
        vector<string> restoreIpAddresses(string& s) {
            vector<string> res;
            for (int a = 1; a < 4; ++a)
            for (int b = 1; b < 4; ++b)
            for (int c = 1; c < 4; ++c) 
            for (int d = 1; d < 4; ++d)
                if (a + b + c + d == s.size()) {
                    int A = stoi(s.substr(0, a));
                    int B = stoi(s.substr(a, b));
                    int C = stoi(s.substr(a + b, c));
                    int D = stoi(s.substr(a + b + c, d));
                    if (A <= 255 && B <= 255 && C <= 255 && D <= 255) {
                        string t = to_string(A) + "." + to_string(B) + "." + to_string(C) + "." + to_string(D);
                        if (t.size() == s.size() + 3) res.push_back(t);
                    }
                }
            return res;
        }
    };
  • 相关阅读:
    .netcore下Dapper helper类
    C#各版本新增加功能(系列文章)
    MySQL 查询连续登陆7天以上的用户
    MySQL 8.0版本 自动排序函数dense_rank() over()、rank() over()、row_num() over()用法和区别
    MYSQL 查看锁的方式
    MYSQL 回表查询原理,利用联合索引实现索引覆盖
    ES查询某个字段分词结果
    maven 安装和配置
    Java 注解
    Java 异常
  • 原文地址:https://www.cnblogs.com/grandyang/p/5686738.html
Copyright © 2020-2023  润新知