JS实现电话号码的字母组合算法示例

 更新时间:2019年02月26日 08:46:22   作者:gqj.cn  
这篇文章主要介绍了JS实现电话号码的字母组合算法,结合实例形式分析了javascript组合运算的相关算法原理与操作技巧,需要的朋友可以参考下

本文实例讲述了JS实现电话号码的字母组合算法。分享给大家供大家参考,具体如下:

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例:

输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

说明:

尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

var letterCombinations = function(digits) {
  const mappings = {
    '2': ['a', 'b', 'c'],
    '3': ['d', 'e', 'f'],
    '4': ['g', 'h', 'i'],
    '5': ['j', 'k', 'l'],
    '6': ['m', 'n', 'o'],
    '7': ['p', 'q', 'r', 's'],
    '8': ['t', 'u', 'v'],
    '9': ['w', 'x', 'y', 'z']
  };
  if (!digits || digits.length === 0) return [];
  if (digits.length === 1) {
    return mappings[digits];
  }
  let result = [];
  let set1 = letterCombinations(digits.substr(0, 1));
  let set2 = letterCombinations(digits.substr(1));
  for (let i = 0; i < set1.length; i++) {
    for (let j = 0; j < set2.length; j++) {
    result.push(set1[i] + set2[j]);
    }
  }
  return result;
  };
console.log(letterCombinations('23'))
var letterCombinations1 = function(digits) {
 var map = {
 "2": ["a", "b", "c"],
 "3": ["d", "e", "f"],
 "4": ["g", "h", "i"],
 "5": ["j", "k", "l"],
 "6": ["m", "n", "o"],
 "7": ["p", "q", "r", "s"],
 "8": ["t", "u", "v"],
 "9": ["w", "x", "y", "z"]
 };
 var rtn = map[digits[0]];
 digits = digits.substr(1);
 digits.split("").forEach(function(digit) {
 var t = [];
 map[digit].forEach(function(letter) {
  t = t.concat(rtn.map(function(item) {
  return item + letter;
  }));
 });
 rtn = t;
 });
 return rtn === undefined ? [] : rtn;
};
console.log(letterCombinations1('32'))

使用在线HTML/CSS/JavaScript代码运行工具http://tools.jb51.net/code/HtmlJsRun测试上述代码,可得如下运行结果:

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结

希望本文所述对大家JavaScript程序设计有所帮助。

相关文章

  • 微信小程序通过js实现瀑布流布局详解

    微信小程序通过js实现瀑布流布局详解

    这篇文章主要介绍了微信小程序通过js实现瀑布流布局详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Dropify.js图片宽高自适应的方法

    Dropify.js图片宽高自适应的方法

    本篇文章主要介绍了Dropify.js图片宽高自适应的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 浅析script标签中的defer与async属性

    浅析script标签中的defer与async属性

    最近在网上看到一个前辈在写script标签的时候,居然同时写了async和defer属性,想着这是什么意思呢?所以决定深入的了解下这其中的学问,以下这篇文章就是个人在学习了之后的一些总结分析,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
    2016-11-11
  • iframe窗口高度自适应的实现方法

    iframe窗口高度自适应的实现方法

    这篇文章主要介绍了iframe窗口高度自适应的实现方法,有需要的朋友可以参考一下
    2014-01-01
  • 页面自定义拖拽布局

    页面自定义拖拽布局

    页面自定义拖拽布局...
    2007-02-02
  • JS获取下拉列表所选中的TEXT和Value的实现代码

    JS获取下拉列表所选中的TEXT和Value的实现代码

    本篇文章主要是对JS获取下拉列表所选中的TEXT和Value的实现代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • 利用javascript实现的三种图片放大镜效果实例(附源码)

    利用javascript实现的三种图片放大镜效果实例(附源码)

    这篇文章主要介绍了利用javascript实现的几种放大镜效果,很实用一款漂亮的js图片放大镜特效,常见于电商网站上产品页,用来放大展示图片细节,很有实用性,推荐下载学习研究。文中提供了完整的源码供大家下载,需要的朋友可以参考借鉴,一起来看看吧。
    2017-01-01
  • 理解javascript中的闭包

    理解javascript中的闭包

    本文主要介绍了javascript中闭包的特性、作用、示例代码以及注意事项。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • js判断浏览器类型为ie6时不执行

    js判断浏览器类型为ie6时不执行

    这篇文章主要介绍了js怎么判断浏览器类型,当类型为ie6时如何不执行,需要的朋友可以参考下
    2014-06-06
  • Three.js利用dat.GUI如何简化试验流程详解

    Three.js利用dat.GUI如何简化试验流程详解

    dat.gui可以方便地向场景中添加控制条,随时调整参数。下面这篇文章主要给大家介绍了关于Three.js利用dat.GUI如何简化试验流程的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09

最新评论