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)
将给定字符串变为合法的IP地址(所有情况)。
需要注意的是:
1、如果0作为开头,那么只能是0。
2、不能超过255。
3、注意不要越界。
尽量运用数组,速度达到最快1ms。
public class Solution { List result = new ArrayList<String>(); char[] IP ; public List<String> restoreIpAddresses(String s) { int len = s.length(); if( len < 4 || len > 12) return result; IP = s.toCharArray(); getReult(0,0,new char[len+3]); return result; } public void getReult(int num,int pos,char[] ans){ if( num != 3){ if ( pos-num < ans.length-3 && IP[pos-num] == '0'){ ans[pos] = '0'; ans[pos+1] = '.'; getReult(num+1,pos+2,ans); return ; } for( int i = pos ; i < pos+2 && i<ans.length-3+num;i++){ ans[i] = IP[i-num]; ans[i+1] = '.'; getReult(num+1,i+2,ans); } if( ans.length-3+num-pos >= 3){ int tt = (IP[pos-num]-'0')*100+(IP[pos-num+1]-'0')*10+(IP[pos-num+1]-'0'); if( tt <= 255 ){ ans[pos+2] = IP[pos+2-num]; ans[pos+3] = '.'; getReult(num+1,pos+4,ans); } } }else{ int len = ans.length-pos; if( len < 1 || len > 3) return ; if ( IP[pos-num] == '0' && len != 1) return ; else{ if( len == 3 ){ int tt = (IP[pos-num]-'0')*100+(IP[pos-num+1]-'0')*10+(IP[pos-num+2]-'0'); if( tt > 255 ) return ; } for( int i = pos; i<ans.length;i++){ ans[i] = IP[i-3]; } result.add( new String ( String.valueOf(ans))); } } } }