【面试系列】复原IP地址

题意:
原题链接

思路:
枚举分界点,保证分界后的每段是合法的才进行深搜即可。

代码:
类成员变量版本

class Solution {
    
    
public:
    
    string str;
    vector<string> res;
    int a[4];
    int n;
    
    int get(int l, int r) {
    
    
        if(r - l > 0 && str[l] == '0') return -1;
        int ans = 0;
        for(int i = l; i <= r; ++i)
            ans = ans * 10 + str[i] - '0';
        return ans;
    }
    
    void dfs(int u, int p) {
    
    
        if(u == 4) {
    
    
            if(p >= str.size()) {
    
    
                string tmp = to_string(a[0]);
                for(int i = 1; i < 4; ++i) {
    
    
                    tmp += ".";
                    tmp += to_string(a[i]);
                }
                res.push_back(tmp);
            }
            return ;
        }
        
        for(int i = p; i < min(p + 3, n); ++i) {
    
    
            a[u] = get(p, i);
            if(a[u] >= 0 && a[u] <= 255) dfs(u + 1, i + 1);
        }
    }
    
    vector<string> restoreIpAddresses(string s) {
    
    
        str = s;
        n = s.size();
        res.clear();
        dfs(0, 0);
        return res;
    }
};

如果传参,全部选择传入引用,这样代码看上去会很简洁,而且知道每个变量的作用

class Solution {
    
    
public:

    int a[4];
    
    int get(int l, int r, string &s) {
    
    
        if(r - l > 0 && s[l] == '0') return -1;
        int ans = 0;
        for(int i = l; i <= r; ++i)
            ans = ans * 10 + s[i] - '0';
        return ans;
    }
    
    void dfs(int u, int p, string &s, vector<string> &res) {
    
    
        if(u == 4) {
    
    
            if(p >= s.size()) {
    
    
                string tmp = to_string(a[0]);
                for(int i = 1; i < 4; ++i) {
    
    
                    tmp += ".";
                    tmp += to_string(a[i]);
                }
                res.push_back(tmp);
            }
            return ;
        }
        
        for(int i = p; i < min(p + 3, (int)s.size()); ++i) {
    
    
            a[u] = get(p, i, s);
            if(a[u] >= 0 && a[u] <= 255) dfs(u + 1, i + 1, s, res);
        }
    }
    
    vector<string> restoreIpAddresses(string s) {
    
    
        vector<string> res;
        dfs(0, 0, s, res);
        return res;
    }
};

おすすめ

転載: blog.csdn.net/weixin_43900869/article/details/119763001