给出以下编码数字的代码-如果我想限制生成的密钥的长度,如何计算最大数字。例如将encode(num)
的结果的最大长度设置为某个固定值,例如10
var alphabet = <SOME SET OF KEYS>,
base = alphabet.length;
this.encode = function(num) {
var str = '';
while (num > 0) {
str = _alphabet.charAt(num % base) + str;
num = Math.floor(num / base);
}
return str;
};
答案 0 :(得分:0)
您正在以num
为基础构造base
的表示形式,并使用一些任意字符作为数字(alphabet
)。
对于n个字符,我们可以表示数字0到base
^ n-1,因此您的问题的答案是base
^ 10-1。例如,使用十进制的5位数字我们可以表示0到99999(10 ^ 5-1-1)之间的数字。
值得注意的是,您将永远不会使用某些n长度以下的字符串,例如'001'或'0405'(使用十进制系统数字)-因此,除了'0'以外,任何以0开头的字符串都不会。
我想,出于允许长度可变的URL缩短器的目的,这可能被认为是浪费。通过使用所有组合,您可以表示数字0到base
^(n + 1)-2,但这并不像您的方案那么简单。