复原IP地址

767 阅读1分钟

给定一个只包含数字的字符串,复原它并返回所有可能的 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位开头的话 , 后面不能再接数字 , 需要特殊处理