【问题标题】:how to find lexicographic string based on specified ranking如何根据指定的排名查找字典字符串
【发布时间】:2020-07-15 18:37:14
【问题描述】:

考虑由大写拉丁字母 (A - Z) 组成的所有长度为 6 的字符串,按字典顺序排序。字符串 AAAAAA 是第一个。字符串 AAAAAZ 是 26th 。 27 日是 AAAABA。这个问题的提示是第 N 个字符串,其中 N 是小于 2^ 30 - M 的素数数。 M 是 123456789 的排列,我们不会告诉你它是哪一个,但我们会给你以下约束以减少可能性空间:

  1. M 可以被 567 整除。
  2. M以2开头,以4结尾,中间为8。

我设法找到了 M 和第 N 个,但我无法找到如何根据排名找到正确字符串的解决方案。请注意,我在排名 (Nth) 上发现了 9 种可能性,它们是:

  • 43973488
  • 43929860
  • 41992802
  • 41914646
  • 41831591
  • 41232030
  • 41066565
  • 40861259
  • 40167328

感谢您的帮助。

【问题讨论】:

  • 你想找到所有 9 个可能的字符串吗?
  • 是的,我应该找到所有 9 个可能的字符串。
  • @EhsanNazeri 谢谢人 :)
  • 不客气。

标签: javascript logic


【解决方案1】:

您需要将数字转换为 base 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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2016-04-13
    • 1970-01-01
    相关资源
    最近更新 更多