如何根据指定的排名查找字典字符串
how to find lexicographic string based on specified ranking
考虑所有由大写拉丁字母 (A - Z) 组成的长度为 6 的字符串,并按字典顺序排序。字符串 AAAAAA 是第一个。字符串 AAAAAZ 是第 26 个。第 27 个是 AAAABA。这个问题的线索是第 N 个字符串,其中 N 是小于 2^ 30 − M 的素数个数。 M 是 123456789 的排列,我们不会告诉你它是哪一个,但我们会给你以下约束来减少 space 的可能性:
- M能被567整除
- M以2开头,以4结尾,中间数字为8
我设法找到了 M 和第 N 个,但我无法找到如何根据排名找到正确字符串的解决方案。请注意,我在排名(第 N 个)上找到了 9 种可能性,它们是:
- 43973488
- 43929860
- 41992802
- 41914646
- 41831591
- 41232030
- 41066565
- 40861259
- 40167328
感谢您的帮助。
您需要将数字转换为 26 进制,并将每个数字与相关字符匹配
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
function convertToBase26Strings(number) {
number = number - 1 ;
var res = ""
while(number >= chars.length ) {
var i = number % chars.length ;
number = Math.floor(number / chars.length)
res += chars[i];
}
res += chars[number];
return res.split("").reverse().join("").padStart(6 , "A");
}
console.log(convertToBase26Strings(1));
console.log(convertToBase26Strings(26));
console.log(convertToBase26Strings(27));
考虑所有由大写拉丁字母 (A - Z) 组成的长度为 6 的字符串,并按字典顺序排序。字符串 AAAAAA 是第一个。字符串 AAAAAZ 是第 26 个。第 27 个是 AAAABA。这个问题的线索是第 N 个字符串,其中 N 是小于 2^ 30 − M 的素数个数。 M 是 123456789 的排列,我们不会告诉你它是哪一个,但我们会给你以下约束来减少 space 的可能性:
- M能被567整除
- M以2开头,以4结尾,中间数字为8
我设法找到了 M 和第 N 个,但我无法找到如何根据排名找到正确字符串的解决方案。请注意,我在排名(第 N 个)上找到了 9 种可能性,它们是:
- 43973488
- 43929860
- 41992802
- 41914646
- 41831591
- 41232030
- 41066565
- 40861259
- 40167328
感谢您的帮助。
您需要将数字转换为 26 进制,并将每个数字与相关字符匹配
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
function convertToBase26Strings(number) {
number = number - 1 ;
var res = ""
while(number >= chars.length ) {
var i = number % chars.length ;
number = Math.floor(number / chars.length)
res += chars[i];
}
res += chars[number];
return res.split("").reverse().join("").padStart(6 , "A");
}
console.log(convertToBase26Strings(1));
console.log(convertToBase26Strings(26));
console.log(convertToBase26Strings(27));