[leetcode]Restore IP Addresses

Restore IP Addresses

 

Given a string containing only digits, restore it by returning all possible valid IP address combinations.

For example:
Given "25525511135",

return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)

解题思路:递归遍历

void push(string &str, int start, int n, string &retStr){
    for(int i = 0; i < n; i++){
        retStr.push_back(str[start + i]);
    }
}
void pop(string &retStr, int n){
    for(int i = 0; i < n; i++){
        retStr.pop_back();
    }
}
void innserRestoreIP(string str, int start, int dot, string rets, vector<string> & vs){
	int slen = str.size();
	int gap = slen - start;
	if(0 == dot){
		//如果剩下数字大于3或没有剩,或剩下2个以及以上第一个不能以0开头
		if(gap > 3 || 0 == gap || (gap > 1 && '0' == str[start])) return; 
		string s(str, start, gap);
		if(atoi(s.c_str()) > 255) return; //剩下的数字大于255也不合法
		push(str, start, gap, rets);
		vs.push_back(rets);
		return;
	}
	if(start < slen){
		push(str, start, 1, rets);  //先取一个字符
		rets.push_back('.');
		innserRestoreIP(str, start + 1, dot - 1, rets, vs);
		pop(rets, 2);
	}
	if(str[start] != '0'){ //取两或三个字符但不能以0开头
		if(start + 1 < slen){
			push(str, start, 2, rets);
			rets.push_back('.');
			innserRestoreIP(str, start + 2, dot - 1, rets, vs);
			pop(rets, 3);
		}
		if(start + 2 < slen){
			string tmpStr(str, start, 3);
			if(atoi(tmpStr.c_str()) <= 255){
				push(str, start, 3, rets);
				rets.push_back('.');
				innserRestoreIP(str, start + 3, dot - 1, rets, vs);
				pop(rets, 4); 
			}
		}		    
	}
}
vector<string> restoreIpAddresses(string s) {
	vector<string> vs;
	string rets;
	innserRestoreIP(s, 0, 3, rets, vs);  //源始字符串,下标0,句点的个数

	return vs;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值