题解 | #数字字符串转化成IP地址#
数字字符串转化成IP地址
https://www.nowcoder.com/practice/ce73540d47374dbe85b3125f57727e1e
str1.str2.str3.str4 str1的长度有1,2,3 三种选择 str2的长度有1,2,3 三种选择 str3的长度有1,2,3 三种选择 str1,str2,str3 选定之后,str4也就确定了。 判断组合(str1,str2,str3,str4)是否满足要求 0<=str&&str<=255 不能出现 00,01, 000,001等情况,即str长度大于1时,不能以0开头。 总共就27中组合,手撕也可行。 import java.util.ArrayList; import java.util.HashSet; public class Solution { public static void main(String[] args) { new Solution().restoreIpAddresses("25525522135"); } /** * @param s string字符串 * @return string字符串ArrayList */ public ArrayList<String> restoreIpAddresses(String s) { // write code here String str1 = null; String str2 = null; String str3 = null; String str4 = null; ArrayList<String> itemList = new ArrayList<>(10); for (int a1 = 1; a1 < 4 && a1 < s.length(); a1++) { str1 = s.substring(0, a1); for (int a2 = 1; a2 < 4 && a1 + a2 < s.length(); a2++) { str2 = s.substring(a1, a1 + a2); for (int a3 = 1; a3 < 4 && a1 + a2 + a3 < s.length(); a3++) { str3 = s.substring(a1 + a2, a1 + a2 + a3); str4 = s.substring(a1 + a2 + a3); String tmp = make(str1, str2, str3, str4); if (tmp != null) { itemList.add(tmp); } } } } return itemList; } private String make(String str1, String str2, String str3, String str4) { if(str1.length()>1 && str1.charAt(0)=='0'){ return null; } if(str2.length()>1 && str2.charAt(0)=='0'){ return null; } if(str3.length()>1 && str3.charAt(0)=='0'){ return null; } if(str4.length()>1 && str4.charAt(0)=='0'){ return null; } if (Integer.parseInt(str1) <= 255 && Integer.parseInt(str2) <= 255 && Integer.parseInt(str3) <= 255 && Integer.parseInt(str4) <= 255) { return str1 + "." + str2 + "." + str3 + "." + str4; } return null; } }