题目链接:https://leetcode.com/problems/restore-ip-addresses/
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
Example:
Input: "25525511135"
Output: ["255.255.11.135", "255.255.111.35"]
思路:
用回溯,依次找出符合条件的结果。
简单来说, 就是ip的每一段分别取1位, 2位, 3位, 分别穷举之后的字符,
并判断每部分是否为有效的ip。
1. 在验证字符串是否是数字的时候,要注意0的情况,001,010,03都是非法的。
所以,如果第一位取出来是0,那么我们就判断字符串是否是"0",不是的情况都是非法的。
2. 取字符串的时候,注意位数不够的问题,不仅<4, 而且<s.length()
3. 注意substring的范围
4. 字符串转换成数字 Integer.parseInt();
5. 别忘了IP 地址里面的 "."
AC 3ms Java:
class Solution {
public List<String> restoreIpAddresses(String s) {
List<String> ans=new ArrayList();
if(s.length()<4||s.length()>12)
return ans;
helper(s,"",ans,1);
return ans;
}
public void helper(String s,String temp,List<String> ans,int count){
if(count==4&&isValid(s)){
ans.add(temp+s);
return;
}
for(int i=0;i<Math.min(4,s.length());i++){
String cur=s.substring(0,i);
if(isValid(cur)){
helper(s.substring(i),temp+cur+".",ans,count+1);
}
}
}
public boolean isValid(String s){
if(s.length()==0)
return false;
if(s.charAt(0)=='0')
return s.equals("0");
int num=Integer.parseInt(s);
return 0<num&&num<=255;
}
}