Restore IP Addresses

MediumStringBacktracking

Solution

export function restoreIpAddresses(s: string): string[] {
  const answer: string[] = [];
 
  const isValid = (value: string) => {
    const numericValue = parseInt(value, 10);
    return 0 <= numericValue && numericValue <= 255 && value === numericValue.toString();
  };
 
  const backtrack = (current: string[], startIndex: number) => {
    if (current.length === 3) {
      const substr = s.substring(startIndex);
      if (isValid(substr)) {
        answer.push([...current, substr].join('.'));
      }
      return;
    }
    for (let endIndex = startIndex; endIndex < Math.min(startIndex + 3, s.length); endIndex++) {
      const substr = s.substring(startIndex, endIndex + 1);
      if (isValid(substr)) {
        current.push(substr);
        backtrack(current, endIndex + 1);
        current.pop();
      }
    }
  };
 
  backtrack([], 0);
  return answer;
}