93. 复原IP地址(C++)---递归 + 回溯 + 剪枝

题目详情

给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔。

 

示例:

输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]



——题目难度:中等


 






-代码如下

class Solution {
private:
	vector ans;
	
public:
    vector restoreIpAddresses(string s) {
    	string ip;
        helper(s, 0, ip);
        return ans;
    }
    
    void helper(string s, int n, string ip) {
    	if (n == 4) {
    		if (s.empty()) ans.push_back(ip);
    	} else {
    		for(int k = 1; k < 4; k++) {
    			if (s.size() < k) break;
    			int val = stoi(s.substr(0, k));
    			//值大于255或者以0开头不符合IP规定,可以剪枝
    			if (val > 255 || k != to_string(val).size()) break;
    			helper(s.substr(k), n + 1, ip + s.substr(0, k) + (n == 3 ? "" : "."));
    		}
   		}
   		
   		return ;
	}
}; 		

结果
93. 复原IP地址(C++)---递归 + 回溯 + 剪枝_第1张图片

 

你可能感兴趣的:(LeetCode-解题记录,递归的使用-综合,c++,字符串,递归法)