Javascript 如何有效地增加字母表中的值
假设您有一个字母表,其字符顺序如下:Javascript 如何有效地增加字母表中的值,javascript,string,algorithm,Javascript,String,Algorithm,假设您有一个字母表,其字符顺序如下: abcdefghijklmnopABCDEFG123456789 然后,您希望将它们增加到任意长度。所以它从一个字符开始,然后是2个,然后是3个,然后。。。n a b c ... A B C ... 1 2 3 ... aa ab ... aA aB ... ba bb bc ... bA bB ... za zb ... 1a 1b ... aaa aab aac ... aba abb abc ... aAa aAb ... 所以它先增加最右边的,然
abcdefghijklmnopABCDEFG123456789
然后,您希望将它们增加到任意长度。所以它从一个字符开始,然后是2个,然后是3个,然后。。。n
a
b
c
...
A
B
C
...
1
2
3
...
aa
ab
...
aA
aB
...
ba
bb
bc
...
bA
bB
...
za
zb
...
1a
1b
...
aaa
aab
aac
...
aba
abb
abc
...
aAa
aAb
...
所以它先增加最右边的,然后是左边的,然后是左边的,等等
这有点棘手。不知道怎么做
想知道怎么做,这样它就可以使用任何字母表,并构造成任意长度,所以它是通用的
function getStringAtIndex(index, alphabetArray) {
}
或者也许可以用另一种方式来做,我不确定。@tehhowch完全正确,而不是做十六进制(base 16),你本质上是想做base-n数学。对于指定的字符集,这将是base-33数学(如果包含0字符) 每一位小数代表n^x次方。十进制很容易。100是10^2,1000是10^3。这就是对数:对数(1000)以10=3为底,因为10^3=1000 幸运的是,我们可以通过执行log(n)/log(base)获得任何基的日志。因此具有以下功能:
function convert(number) {
var chars = '0abcdefghijklmnopABCDEFG123456789',
base = chars.length, i = number, str = '',
exp = Math.floor(Math.log(i)/Math.log(base))+1;
while(exp--) {
var bexp = Math.pow(base, exp);
var j = Math.floor(i/bexp);
i -= j*bexp;
str += chars[j];
}
return str;
}
convert(90014234); // "bi62Gb"
convert(791424) // "F01B"
convert(23423); // "Ep3"
convert(33); // "a0"
您可以通过使用更常见的字符集(如十六进制(以16为基数))来验证该方法,并确保数字正确无误。您需要在函数中替换var chars='0123456789abcdef'
。然后我们指定一个十六进制数并确保输出匹配:
convert(0xdd5439af); // "dd5439af"
听起来你想用任意基数来表示一个数字。当
n
小于字母表中的字符数时,您有一个数字。当n
小于n*n
时,您有两个数字。等