回溯三:复原IP地址

2021-08-03  本文已影响0人  程一刀

题目地址: https://leetcode-cn.com/problems/restore-ip-addresses/

题目描述: 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。
例如:"0.1.2.201" 和 "192.168.1.1" 是 有效的 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效的 IP 地址。

参考代码:

class Solution1 {
    vector<string> result;
    void backtracking(string &s,int startIndex, int number){
        if (number == 3) {
            if (isValid(s, startIndex, s.size()-1)) {
                result.push_back(s);
            }
            return;
        }
        for (int i = startIndex; i<s.size(); i++) {
            if (isValid(s, startIndex, i)) {
                s.insert(i+1, ".");
                backtracking(s, i+2, number +1);
                s.erase(i+1,1);
            } else {
                break;
            }
        }
    }
    bool isValid(string s,int start,int end) {
        //1111
        if (start > end) {
            return false;
        }
        // 001 非法
        if (s[start] == '0' && start != end) {
            return  false;
        }
        // 大于255 非法
        int num = 0;
        for (int i = start; i<=end; i++) {
            num = (s[i] - '0') + num * 10;
        }
        if (num > 255) {
            return  false;
        }
        return true;
    }
public:
    vector<string> restoreIpAddresses(string s) {
        result.clear();
        if (s.size() > 12) return result; // 算是剪枝了
        backtracking(s, 0, 0);
        return result;
    }
};

参考链接: https://github.com/youngyangyang04/leetcode-master/blob/master/problems/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.md

上一篇 下一篇

猜你喜欢

热点阅读