Leetcode93.Restore_Ip_Addresses

IP地址格式:X.X.X.X(0<=X<=255),例如172.10.255.0
主要需注意的几个点:对‘0’的处理,不能出现001,010等0为首位的情况(但0可以单独存在(X.0.X.X是合法的));注意三位数的大小不能超过255,超过即为非法。
时间复杂度:O(N)
C++代码:

class Solution {
public:
	vector<string> result;
	vector<string> restoreIpAddresses(string &s) {
		addDot(s, 4, 0);
		return result;
	}
	void addDot(string &s, int count, int pos)
	{
		if (s.length() - pos > 3 * count)//剪枝,当点的个数加一少于数字的三分之一时便不可能
			return;                  //出现合法情况(比如后面还有7个数但只剩1个点就不可能
		else	                         //出现合法分割)
		{
			int num = 0;
			for (int i = 1; i <= 3; i++)
			{
				if (pos + i > s.length())
					break;
				num *= 10;
				num += s[pos + i - 1] - '0';
				if (num > 255)
					return;
				if (count != 1)
				{
					if (pos + i == s.length())
						break;
					s.insert(s.begin() + pos + i, '.');
					addDot(s, count - 1, pos + i + 1);
					s.erase(s.begin() + pos + i);
					if (i == 1 && s[pos] == '0')
						return;
				}
				if (i == 1 && s[pos] == '0'&&pos != s.length() - 1)
					return;
			}
			if (count == 1)
				result.push_back(s);
		}
	}
};

猜你喜欢

转载自blog.csdn.net/qq_42263831/article/details/83385520
今日推荐