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

解答

一开始看还挺难的,想了想发现其实就是DFS。索的每一步就相当于从剩下的字符串中截取一段,需要确保截取的这一段合法(不大于255,同时除了0之外首位不能为0)。剪枝有两种情况,一种是已经截取了4次但字符串还没截取完,另一种是截取不到4次就已经截取完了。当截取4次且字符串已经截取完,就得到了一个解。

下面是AC的代码:

class Solution {
public:
    vector<string> ans;
    vector<string> temp;
    void cut(string s){
        int length = s.size();
        int seg = temp.size();
        if(seg == 4 && length == 0){
            string temps;
            for(vector<string>::iterator iter = temp.begin(); iter != temp.end(); iter++){
                if(iter != temp.begin()){
                    temps += ".";
                }
                temps += *iter;
            }
            ans.push_back(temps);
        }
        else if(seg == 4 && length != 0){
            ;
        }
        else if(seg < 4 && length == 0){
            ;
        }
        else{
            for(int i = 1; i < 4 && i < length + 1; i++){
                if(i != 1 && s[0] == '0'){
                    continue;
                }
                if(atoi(s.substr(0, i).c_str()) < 256){
                    temp.push_back(s.substr(0, i));
                    cut(s.substr(i, length - i));
                    temp.pop_back();
                }
            }
        }
    }
    vector<string> restoreIpAddresses(string s) {
        cut(s);
        return ans;
    }
};

121
四个月❤️

上一篇:2019.02.17 spoj Query on a tree VII(链分治)


下一篇:Python字典的操作与使用