93:Restore IP Addresses【回溯】【字符串】

題目鏈接:click~

/*題意:給出一串只含數字的字符串,返回所有合法的IP*/

/**
 *思路:   對字符串進行分段處理,每段組成的數不能超過255,。將IP地址分爲4段
 *      每段有三種情況:
 *      1)只取一個數字
 *      2)取兩個數字,第一個數不爲0
 *      3)取三個數字,第一個數字不爲0,且三個數字組成的數小於256
 */


class Solution {
public:
    //part表示第幾段IP
    void restoreIpAddresses(string &s, int start, int part, string ip, vector<string> &res) {
        int len = s.size();
        //剩下的數字過多
        if(len - start > (4-part)*3) return;
        //剩下的數字過少
        if(len - start < (4-part)) return;
        if(start == len && part == 4) {
            //將ip中最後一個'.'去掉
            res.push_back(ip.substr(0, ip.size()-1));
            return;
        }
        int num = 0;
        for(int i = start; i < min(start+3, len); i ++) {
            //三種情況
            num = num*10 + s[i] - '0';
            if(num <= 255) {
                ip += s[i];
                restoreIpAddresses(s, i+1, part+1, ip+'.', res);
            }
            //如果第一個是0的話, 只考慮0的情況,不需要考慮0組成的地址
            if(num == 0) break;
        }
    }
    vector<string> restoreIpAddresses(string s) {
        vector<string> res;
        string ip;
        restoreIpAddresses(s, 0, 0, ip, res);
        return res;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章