您的位置:首页 > 其它

LeetCode OJ-- Restore IP Addresses

2014-06-21 20:27 369 查看
https://oj.leetcode.com/problems/restore-ip-addresses/

string到int的ip地址格式化。

分别用 i+1,j+1,k+1,表示前三个地址段的数位的个数。之后判断每个地址段是否数字个数都是从1到3,并且数是从0到255,符合条件的即可。

如果一个地址段的第一位是0,则这个地址段只能是0.比如 010010,表示成0.10.0.10或者0.100.1.0

class Solution {
public:
int str2int( string str)
{
if(str[0]=='0'&& str.size()>1)
return 270; //this is 01,010 and so on , no allowed
// if the first bit is 0 ,then it no allowed second bit
int ans = 0;
for(int i = 0;i<str.size();i++)
{
ans = ans*10;
ans += str[i] - '0';
}
return ans;
}
vector<string> restoreIpAddresses(string s) {
string strAnsPiece;
vector<string> ans;
if(s.size()>12 || s.size()<4)
return ans;

for(int i = 0;i<=2;i++)
{
string str1 = s.substr(0,i+1);
if(s.size()-i-1>9)
continue;
if(str2int(str1)>255)
break;

for(int j = 0;j<=2;j++)
{
if( s.size() - i - j - 2 >6)
continue;
string str2 = s.substr(i+1,j+1);
if(str2int(str2)>255)
break;

for(int k = 0;k<=2;k++)
{
string str3 = s.substr(i+j+2,k+1);
if(str2int(str3)>255)
break;
if((s.size() - i - j - k - 3 >=1 )&& (s.size() - i - j - k - 3 <=3 ))
{
string str4 = s.substr(i+j+k+3,s.size()-i-j-k-3);
if(str2int(str4)<=255)
{
string ansPiece = str1;
ansPiece.append( ".");
ansPiece.append(str2);
ansPiece.append( ".");
ansPiece.append(str3);
ansPiece.append(".");
ansPiece.append(str4);
ans.push_back(ansPiece);
}
}

}
}
}
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: