{"id":1258,"date":"2019-11-02T23:12:01","date_gmt":"2019-11-03T03:12:01","guid":{"rendered":"https:\/\/resrvoir.com\/?page_id=1258"},"modified":"2019-11-02T23:39:26","modified_gmt":"2019-11-03T03:39:26","slug":"keypad-combinations","status":"publish","type":"page","link":"https:\/\/resrvoir.com\/?page_id=1258","title":{"rendered":"Keypad Combos"},"content":{"rendered":"\n<p>Given a string of digits from 2-9, return all possible letter combinations from the digits on the phone keypad below:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"> 1    2    3\n     ABC  DEF\n 4    5    6\nGHI  JKL  MNO\n 7    8    9\nPQRS TUV WXYZ<\/pre>\n\n\n\n<p>For example, &#8220;23&#8221; creates the following:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[\n  'AD', 'AE', 'AF',\n  'BD', 'BE', 'BF',\n  'CD', 'CE', 'CF'\n]<\/pre>\n\n\n\n<p>One possibility is a recursive approach. For each letter in a digit, append it to all previous sub-results. Digits have either 3 or 4 letters, so for a string with n digits, the worse-case runtime is O(4^n).<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const keypad = {\n  1: [],\n  2: ['A', 'B', 'C'],\n  3: ['D', 'E', 'F'],\n  4: ['G', 'H', 'I'],\n  5: ['J', 'K', 'L'],\n  6: ['M', 'N', 'O'],\n  7: ['P', 'Q', 'R', 'S'],\n  8: ['T', 'U', 'V'],\n  9: ['W', 'X', 'Y', 'Z']\n}\n\nfunction keypadCombinations(str) {\n  if (str.length == 0) {\n    return [\"\"]\n  }\n\n  let digit = str[0]\n  let chars = keypad[digit]\n  let substr = str.substring(1)\n  let combos = keypadCombinations(substr)\n  let newCombos = []\n\n  for (let i = 0; i &lt; chars.length; i++) {\n    let c = chars[i]\n\n    for (let j = 0; j &lt; combos.length; j++) {\n      let newstring = c + combos[j]\n      newCombos.push(newstring)\n    }\n  }\n\n  return newCombos\n}<\/pre>\n\n\n\n<p>Here are some sample results:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">let x = keypadCombinations(\"2\")\nlet y = keypadCombinations(\"23\")\nlet z = keypadCombinations(\"234\")\nconsole.log(x)\nconsole.log(y)\nconsole.log(z)\n\n[\n  'A', 'B', 'C'\n]\n[\n  'AD', 'AE', 'AF',\n  'BD', 'BE', 'BF',\n  'CD', 'CE', 'CF'\n]\n[\n  'ADG', 'ADH', 'ADI', 'AEG',\n  'AEH', 'AEI', 'AFG', 'AFH',\n  'AFI', 'BDG', 'BDH', 'BDI',\n  'BEG', 'BEH', 'BEI', 'BFG',\n  'BFH', 'BFI', 'CDG', 'CDH',\n  'CDI', 'CEG', 'CEH', 'CEI',\n  'CFG', 'CFH', 'CFI'\n]<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Given a string of digits from 2-9, return all possible letter combinations from the digits on the phone keypad below: For example, &#8220;23&#8221; creates the following: One possibility is a recursive approach. For each letter in a digit, append it to all previous sub-results. Digits have either 3 or 4 letters, so for a string [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":2,"menu_order":25,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/resrvoir.com\/index.php?rest_route=\/wp\/v2\/pages\/1258"}],"collection":[{"href":"https:\/\/resrvoir.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/resrvoir.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/resrvoir.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/resrvoir.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1258"}],"version-history":[{"count":14,"href":"https:\/\/resrvoir.com\/index.php?rest_route=\/wp\/v2\/pages\/1258\/revisions"}],"predecessor-version":[{"id":1273,"href":"https:\/\/resrvoir.com\/index.php?rest_route=\/wp\/v2\/pages\/1258\/revisions\/1273"}],"up":[{"embeddable":true,"href":"https:\/\/resrvoir.com\/index.php?rest_route=\/wp\/v2\/pages\/2"}],"wp:attachment":[{"href":"https:\/\/resrvoir.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}