vamsu
8/5/2018 - 10:06 PM

Phone number combinations

Phone number combinations

// This is a sandbox to experiment with CoderPad's execution capabilities.
// It's a temporary, throw-away session only visible to you.

import java.io.*;
import java.util.*;

/*
 * To execute Java, please define "static void main" on a class
 * named Solution.
 *
 * If you need more classes, simply define them inline.
 */

class Solution {
  List<List<Character>> keypad = Arrays.asList(
    Arrays.asList(),
    Arrays.asList(),
    Arrays.asList('A','B','C'),
    Arrays.asList('D','E','F'),
    Arrays.asList('G','H','I'),
    Arrays.asList( 'J', 'K', 'L' ),
    Arrays.asList( 'M', 'N', 'O' ),
    Arrays.asList( 'P', 'Q', 'R', 'S'),
    Arrays.asList( 'T', 'U', 'V' ),
    Arrays.asList( 'W', 'X', 'Y', 'Z')
  );
  public static void main(String[] args) {
    Solution solution =new Solution();
    String[] input = {
          null,
          "",
          "234",
          "9583"
        };
    for(int i=0;i< input.length;i++) {
      System.out.println("Input: " + input[i] +
                       ", Result: " + solution.phoneCombinations(input[i]));
    }
  }
    
  public Set<String> phoneCombinations(String input){
      Set<String> result = new HashSet<>();
      if(input == null || input.length() < 1) {
        return result;
      }
      phoneCombinations(input, "", result, input.length()-1);
      return result;
  }
    
  private void phoneCombinations(String input, String temp, Set<String> result, int index) {
       if(index < 0) {
            result.add(temp);
            return;
       }
       char charDigit = input.charAt(index);
       int digit = charDigit - '0'; 
       List<Character> current = keypad.get(digit);
       if(current.size() ==0 ) {
        phoneCombinations(input, charDigit + temp, result, index -1);    
       } else {
           for(int i=0; i< current.size(); i++){
            phoneCombinations(input, current.get(i) + temp, result, index -1);   
           }
       }
  }
    
}