題目
給定一個只含數位字串,返回所有合法的ip地址 演算法 ip地址是4段 每段三個情況:
(1) 只取一個數字
(2) 取兩個數字,第一個數字不是0
(3) 取三個數字,第一個數字不是0,而且三個數組成的數小於256
//遞迴
import java.util.*;class Solution{ public ArrayList<String> restoreIpAddress(String s){ ArrayList<String> res=new ArrayList<String>(); String ip=""; restoreIpAddress(s,0,0,ip,res); return res; } private void restoreIpAddress(String s,int start,int part,String ip, ArrayList<String> res){ //數字多,則忽略 if(s.length() -start >(4-part)*3) return; //數字太少也忽略 if(s.length()-start <(4-part)) return; //找到一個合法的ip if(start==s.length() && part ==4) { //把最後一個抹去 res.add(ip.substring(0,ip.length()-1)); return; } int num =0; for(int i=start;i<Math.min(start+3,s.length());i++){ //每個位置有三種可能 num = num*10 +(s.charAt(i)-'0'); if(num<=255){ //每段ip地址的數字都是小於256 ip+=s.charAt(i); restoreIpAddress(s,i+1,part+1,ip+'.',res); } //如果第一個是0的話,只考慮0,不考慮0x組成的地址 if(num==0) break; } } }