package com.interview.recursion; import java.util.*; /** * Date 04/04/2016 * @author Tushar Roy * * Given a string containing only digits, restore it by returning all possible valid IP address combinations. * * Reference * https://leetcode.com/problems/restore-ip-addresses/ */ public class RestoreIPAddresses { public List<String> restoreIpAddresses(String s) { List<String> result = new ArrayList<>(); List<String> current = new ArrayList<>(); restoreIpAddressesUtil(s, 0, 0, result, current); return result; } private void restoreIpAddressesUtil(String s, int start, int count, List<String> result, List<String> current) { if (start == s.length() && count == 4) { StringBuffer stringBuffer = new StringBuffer(current.get(0)); for (int i = 1; i < current.size(); i++) { stringBuffer.append(".").append(current.get(i)); } result.add(stringBuffer.toString()); return; } else if (start == s.length() || count == 4) { return; } for (int i = start; i < s.length() && i < start + 3; i++) { if (i != start && s.charAt(start) == '0') { break; } String ip = s.substring(start, i + 1); if (Integer.valueOf(ip) > 255) { continue; } current.add(ip); restoreIpAddressesUtil(s, i + 1, count + 1, result, current); current.remove(current.size() - 1); } } }