1. 程式人生 > >Restore IP Addresses(leetcode)

Restore IP Addresses(leetcode)

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)

這道題用可以用三個iterator分割成四個字串,然後對每個字串分析是否合法即可。

需要注意的一點是1.00.1.1這類IP是否合法,(OJ)上認為這類以零開頭的非零數值全部是非法值。但是實際上我認為應該還是算合法的IP地址吧。

class Solution {
public:
    vector<string> restoreIpAddresses(string s) {
        vector<string> vec;
        if( s.size() > 12 )     return vec;
        for( string::iterator i = s.begin() + 1;i < s.end();++i )   {
            for( string::iterator j = i + 1;j < s.end();++j )
                for( string::iterator k = j + 1;k < s.end();++k )  {
                    string str1(s.begin(),i),str2(i,j),str3(j,k),str4(k,s.end());
                    if( ispos(str1) && ispos(str2) && ispos(str3) && ispos(str4) )    {
                        string str = str1 + '.' + str2 + '.' + str3 + '.' + str4;
                        vec.push_back(str);
                    }
                }
        }
		return vec;
    }
    bool ispos( string str )    {
        int sum = 0;
        for( string::iterator it = str.begin();it != str.end();++it )   {
            sum = sum * 10 + *it - '0';
        }
		if( str[0] == '0')  {
		    if( str.size() == 1 )
		        return true;
		    return false;
		}
		else    {
		    if( sum >= 0 && sum < 256 )
		        return true;
		    return false;
		}
    }
};