package com.freetymekiyan.algorithms.other; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.List; /** * Given a list of integers and a mapping between integers and letters, 1 to A, 2 to B ... 26 to Z. * Generate all possible combinations of letters from the intergers. * <p> * Tags: Backtracking */ public class IntegerToLetters { private IntegerToLetters itl; public List<String> toLetters(String nums) { List<String> res = new ArrayList<>(); helper(nums, "", 0, res); return res; } private void helper(String nums, String s, int start, List<String> res) { if (start >= nums.length()) { res.add(s); return; } for (int end = start + 1; end <= nums.length() && end <= start + 2; end++) { int temp = Integer.parseInt(nums.substring(start, end)); if (1 <= temp && temp <= 26) { s += ((char) (temp + 'A' - 1)); helper(nums, s, end, res); s = s.substring(0, s.length() - 1); } } } @Before public void setUp() { itl = new IntegerToLetters(); } @Test public void testExamples() { List<String> res = itl.toLetters("123"); Assert.assertNotNull(res); Assert.assertEquals(3, res.size()); System.out.println(res); } @After public void tearDown() { itl = null; } }