1. 程式人生 > >【LeetCode】93. 復原IP地址 結題報告 (C++)

【LeetCode】93. 復原IP地址 結題報告 (C++)

原題地址:https://leetcode-cn.com/problems/restore-ip-addresses/description/

題目描述:

給定一個只包含數字的字串,復原它並返回所有可能的 IP 地址格式。

示例:

輸入: "25525511135"
輸出: ["255.255.11.135", "255.255.111.35"]
 

解題方案:

又是一道回溯法的題目,自己還是不能很會解決回溯演算法的題目,遇到稍微麻煩的題目就不知該怎麼下手了,要多加練習呀。。

暴力嘗試1個字元、2個字元、3個字元。。

本題用到了string()函式,之前沒有遇到過這種用法,學到了!!

class Solution {
public:
    vector<string> ans;
    void dfs(string &s, int index, int num, string tmp) {
        if ((5 - num) * 3 < s.size() - index) 
            return;
        if (num == 5) {
            ans.push_back(tmp);
            return;
        }
        if (s[index] == '0')
            dfs(s, index + 1, num + 1, tmp + (num == 1 ? "0" : ".0"));
        else {
            for (int i = 1; i < 4 && i + index <= s.size(); ++ i)
                if (i < 3 || string(s, index, i) <= "255") 
                    dfs(s, index + i, num + 1, tmp + (num == 1 ? "" : ".") + string(s, index, i));
        }
    }
    
    vector<string> restoreIpAddresses(string s) {
        dfs(s, 0, 1, "");
        return ans;
    }
};