LeetCode-93. Restore IP Addresses

来源:互联网 发布:剑三冷艳花姐捏脸数据 编辑:程序博客网 时间:2024/06/06 06:33

题目描述

Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given “25525511135”,
return [“255.255.11.135”, “255.255.111.35”]. (Order does not matter)

解题思路

  1. 采用递归的方式解题,每一次递归调用,分别判断当前字符,当前字符与下一个位置的字符,当前字符与后两个字符(循环调用)是否满足小于等于255的条件。如果当前字符为0,则只循环一次便跳出循环,因为ip地址中不允许有02这种形式,但允许有0这种形式。

代码

class Solution {    List<String> result = new LinkedList<String>();    public List<String> restoreIpAddresses(String s) {        if(s == null || s.length() <=3 || s.length()>12){            return result;        }        for(int i=1;i<=3;i++){            int tmp = Integer.valueOf(s.substring(0,0+i));            if(tmp<=255){                restoreCore(s,i,""+tmp,1);            }            if(s.charAt(0)=='0')//当前字符为0,跳出循环                break;        }        return result;    }    private void restoreCore(String s,int position,String tmp,int count){//count代表递归调用的次数        if(count==4 && position>s.length()-1){            result.add(tmp);            return;        }        if(count>4)            return;        for(int i=1;i<=3 && i+position-1<s.length();i++){            if((4-count)*3<s.length()-position || (4-count)*1>s.length()-position)                return;            int intTmp = Integer.valueOf(s.substring(position,position+i));            if(intTmp<=255){                restoreCore(s,position+i,tmp+"."+intTmp,count+1);            }            if(s.charAt(position)=='0')//当前字符为0,跳出循环                break;        }    }}
原创粉丝点击