import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串ArrayList */ public ArrayList<String> restoreIpAddresses (String s) { // write code here ArrayList<String> ans = new ArrayList<>(); dfs(s, 0, 0, ans); return ans; } String num = ""; private void dfs(String s, int pos, int cnt, ArrayList<String> ans){ if(cnt == 4){ // 已经分割出4个数字,但是字符串的字符还未使用完,肯定不行 if(pos != s.length())return; ans.add(num); } String cur = ""; // 当前分割得到的数字 for(int i = pos; i < pos+3 && i < s.length(); i++){ // 注意边界条件,每个数字长度不超过3位,且遍历的i不超过字符串长度 cur += s.charAt(i); int x = Integer.parseInt(cur); if(x <= 255 && (cur.length()==1 || cur.charAt(0) != '0')){ // 只有一位时可为0,否则不能有前导0 String temp = num; num += cur; if(cnt != 3)num += '.'; // 最后一个数字后面没有. dfs(s, i+1, cnt+1, ans); num = temp; // 回溯 } } } }
使用回溯解决