Restore IP Addresses
给定一个仅包含数字的字符串,将其拆分成有效的ip地址
题目的主要意思实际是在字符串中添加三个点,从而构成一个ip地址,有效的ip地址格式为
- 最多包含12个数字
- 每个数字在[0, 255]之间
- 数字中除了单一0,不能出现类似0开头的数字,比如192.168.1.013中013是不允许的
所以其实就是随便找到三个位置,判断拆分成的四块数字是否满足要求即可
首先,为了易于理解,在安插”.”的过程中不记录组成的ip地址,只是将”.”的位置记录下来,当”.”的个数为3时统一计算
代码如下
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> res;
//不合法
if(s.size() > 12) return res;
//记录"."的位置
vector<int> dots;
dfs(s, res, dots, 0);
return res;
}
private:
void dfs(string& s, vector<string>& res, vector<int>& dots, int idx)
{
if(dots.size() == 3)
{
//判断四个数字是否符合要求,然后添加
//计算one时的写法是有原因的,可以将dots[-1] 看做 -1
string one = s.substr(-1 + 1, dots[0] - (-1));
string two = s.substr(dots[0] +