给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例:
输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]
class Solution {
public List<String> restoreIpAddresses(String s) {
List< String > res = new ArrayList<>();
help( s , "" , res , 0 );
return res;
}
public void help( String sub ,String cur, List<String> res , int num ){
if( sub.length() > 3 * ( 4 - num ) ) return ;
if( num == 4 ){
res.add( cur.substring( 0 , cur.length() - 1 ) );
}
for( int i = 1; i <= 3 && i <= sub.length() ; i++ ){
String tmp = sub.substring( 0 , i );
int n = Integer.parseInt( tmp );
if( n > 255 ){
break;
}
if( i > 1 && tmp.charAt(0) == '0' ){
break;
}
help( sub.substring( i ) , cur+tmp +"." , res , num + 1 );
}
}
}
复制代码
解题思路: ip中每个数字不能大小不能超过255 ,位数最多为3位 , 递归出口为 3 * ( 4 - 已取的位数 ) 对当前遍历的字符串截取1到3位 , 再继续递归 , 如果截取的字符串的值小于255 则符合 , 每次遍历后需要加字符'.' 。特殊情况:以0位开头的话 , 后面不能再接数字 , 需要特殊处理