求字母序列的按字母排序的位置
文章目录
这是一道百度校招的面试题
有由abcdefghijkl组成的字符串(不重复出现),求字符串按字母排列的位次:
如输入1
"hgebkflacdji"
则输出为:1
302715242
如输入1
"abcdefghijlk"
则输出为:1
2
我的求解方法:
思路:求字符串的第一个字母在数组temp中的位置(indexOf()求得)第一个位置确定后,后面的11位字符串可以由11!中排法,所以第一个字母为b则结果result加111!,并将其从数组中移除。然后继续第二个位置,求第二个位置的字母在temp数组中的位置(index),result加上index10!。。。依次类推到最后一个字符。最后的结果还要加上1。JavaScript程序如下:
1 | var line = "hgebkflacdji"; var arr = line.split(''); result = 0; var temp = 'abcdefghijkl'.split(""); // step内存放的是阶乘,分别是11!、10!...1!、0! var step = [39916800, 3628800, 362880, 40320,5040,720, 120,24,6,2,1,1]; for ( var i = 0; i < arr.length; i++ ) { var a = arr[i]; var index = temp.indexOf(a); result += index * step[i]; temp.splice(index,1); } result = result+1; console.log(result); |
可惜在笔试时参考数值中字母顺序弄错了,就差一点,估计过不了百度的笔试了。