您好,欢迎访问一九零五行业门户网

JavaScript趣题:排列组合实战

首先,来看这样一张图,它类似于以前老式平板手机的按键桌面。
我们如果按了“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趣题:排列组合实战的内容。
其它类似信息

推荐信息