最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScript趣题:排列组合实战

来源:动视网 责编:小采 时间:2020-11-27 20:25:42
文档

JavaScript趣题:排列组合实战

JavaScript趣题:排列组合实战:首先,来看这样一张图,它类似于以前老式平板手机的按键桌面。我们如果按了2这个键,那么可以调出A,B,C三种字母来。除了1和0键,其它数字键都可以调出多种字母来。现在问题来了,我选择四个任意数字键,可以得出多少种字母数字组合
推荐度:
导读JavaScript趣题:排列组合实战:首先,来看这样一张图,它类似于以前老式平板手机的按键桌面。我们如果按了2这个键,那么可以调出A,B,C三种字母来。除了1和0键,其它数字键都可以调出多种字母来。现在问题来了,我选择四个任意数字键,可以得出多少种字母数字组合
 首先,来看这样一张图,它类似于以前老式平板手机的按键桌面。

我们如果按了“2”这个键,那么可以调出“A”,“B”,“C”三种字母来。
除了“1”和“0”键,其它数字键都可以调出多种字母来。
现在问题来了,我选择四个任意数字键,可以得出多少种字母数字组合来?
比方说,我选择了“0002”,因为“0”键没有对应的字母,所以,它的组合只有三种——“000A”,“000B”,“000C”。
来个复杂点的例子,连续按“0023”,“0”保持不变,“2”可以对应“A”,“B”,“C”,“3”可以对应“D”,“E”,“F”,那么,按照排列组合的知识,应该有1*1*3*3=9种组合方式。
好,那咋们来看怎么解决这个问题。
第一步,根据数字键和对应字母的关系建立映射。

var map = { 
 1 : [ 1 ], 
 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" ], 
 0 : [ 0 ] 
};

第二步,使用递归求解排列组合

function telephoneWords(digitString) { 
 var array = []; 
 var result = []; 
 digitString.split("").forEach(function(e) { 
 array.push(map[e]); 
 }) 
 var traverse = function foo(from, to) { 
 if (to.length < 4) { 
 var cur = from.shift(); 
 for (var i = 0; i < cur.length; i++) { 
 var newTo = to.slice(0); 
 newTo.push(cur[i]); 
 var newFrom = from.slice(0); 
 foo(newFrom, newTo); 
 } 
 } else { 
 result.push(to.join("")); 
 } 
 }; 
 traverse(array, []); 
 return result; 
}

文档

JavaScript趣题:排列组合实战

JavaScript趣题:排列组合实战:首先,来看这样一张图,它类似于以前老式平板手机的按键桌面。我们如果按了2这个键,那么可以调出A,B,C三种字母来。除了1和0键,其它数字键都可以调出多种字母来。现在问题来了,我选择四个任意数字键,可以得出多少种字母数字组合
推荐度:
标签: js 组合 排列
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top