leetcode93. Restore IP Addresses

難度:medium

題目:

這裏寫圖片描述

IP 地址是一個32位的整數,每8位的十進制組成一個數,用 . 分隔

很明顯是一個回朔法的題,特別注意的是遇到0時的情況,還有每個數值要小於256,進行剪枝減小運算量

AC解:

class Solution {
public:
    vector<string> restoreIpAddresses(string s) {
        int len = s.length();
        vector<string> v;
        vector<string> temp;
        backTrack(v, temp, s, 0, len);
        return v;
    }

    void backTrack(vector<string>& v, vector<string>& temp, string& s,
                  int start, int len) {
        if (start == len && temp.size() == 4) {
            v.push_back(temp[0] + "." + temp[1] + "."
                       + temp[2] + "." + temp[3]);
            return;
        }

        if (len - start > (4 - temp.size()) * 3)
            return; //剪枝
        if (len - start < (4 - temp.size()))
            return; //剪枝

        int sum = 0;
        for (int i = start; i < len && i < start + 3; i++) {
            sum = 10 *sum + s[i] - '0';
            if (sum > 255) return;  //剪枝
            temp.push_back(s.substr(start, i - start + 1));
            backTrack(v, temp, s, i + 1, len);
            temp.pop_back();
            if (sum == 0) return;   //剪枝
        }
    }
};
發佈了66 篇原創文章 · 獲贊 21 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章