现在有一个只包含数字的字符串,将该字符串重新存储成IP地址的形式,返回所有可能的情况。
例如:给出的字符串为"25525511135", 返回["255.255.11.135", "255.255.111.35"]. (顺序没有关系)
<?php
function restoreIpAddresses($s) {
$length = strlen($s);
if ($length > 12 || $length < 4) {
//如果超过12位,小于4位,则不可能分割成ip段
return ;
}
$arrOutput = array();
for ($i = 1; $i <= 3; $i ++) {
for ($j = $i + 1; $j <= $i + 3; $j ++) {
for ($k = $j + 1; $k < $length; $k ++) {
if ($j >= $length - 1) {
//第二个位置超过了长度,则结束
continue;
}
$sub1 = substr($s, 0, $i);
$sub2 = substr($s, $i, $j - $i);
$sub3 = substr($s, $j, $k - $j);
$sub4 = substr($s, $k, $length - $k);
if (intval($sub1) > 255 || intval($sub2) > 255
|| intval($sub3) > 255 || intval($sub4) > 255) {
continue;
}
$arrOutput[] = "$sub1.$sub2.$sub3.$sub4";
}
}
}
return $arrOutput;
}
$s = '25525511135';
$s = '25525';
$ret = restoreIpAddresses($s);
print_r($ret);