当前位置: 首页 > 知识库问答 >
问题:

如何从位于该字符串中字符排列数量范围内的数字生成唯一字符串?

郎弘业
2023-03-14

假设我有一个长度为8个字节的字符串,每个字节都是一个字符,来自以下范围:0-9,a-z,A-Z,总共62个变量。这个字符串的排列总数是62的8次方= 218340105584896。我需要编写一个函数,该函数将接受0-218340105584896范围内的数字,并返回唯一的字符串。在“唯一”下,我的意思是该函数不能为该范围内的两个不同数字返回相同的字符串。任何代码示例和提示将不胜感激。

共有2个答案

邢博文
2023-03-14

如果我没理解错你的问题,那么就在昨天,我放了一个JavaScript代码来回答另一个问题:在组合中获取偏移量,而不生成所有可能的组合。你感兴趣的方法是< code>indexToPermutation。请注意,JS对数字类型有一些限制,因此它不适合您的范围,但是如果您将它翻译成支持64位< code>long整数类型的其他语言,它应该可以工作。不幸的是,你没有把任何语言标签,所以我不能自己做翻译。

勾炳
2023-03-14

您可以将该数字视为基数62的数字,并相应地填入字符串“digits”(基数62位)。

让我们看看如何使用不同基数中的十进制数 1234 来做到这一点。请注意,下面的除法始终是整数除法(小数部分被砍掉)。

基数10(十进制):0-9

1234 / 10^3 = 1, 1234 mod 10^3 = 234
234 / 10^2 = 2, 234 mod 10^2 = 34
34 / 10^1 = 3, 34 mod 10^1 = 4
4 / 10^0 = 4, 4 mod 10^0 = 0
Thus we represent this number in base-10 as "1234"

基数16(十六进制):0-9,a-f(其中a=10,b=11,…)

1234 / 16^2 = 4, 1234 mod 16^2 = 210
210 / 16^1 = d, 210 mod 16^1 = 2
2 / 16^0 = 2, 2 mod 16^0 = 0
Thus we represent this number in base-16 as "4d2"

这可以扩展到任何基数,包括基数-62: 0-9、a-z、A-Z

1234 / 62^1 = j, 1234 mod 62^1 = 56
56 / 62^0 = U, 56 mod 62^0 = 0
Thus we represent this number in base-62 as "jU"

我没有费心做前导0,但是你可以看到1234/62^2=0,1234 mod 62^2=1234,所以在base-62中你可以有“000000jU”。

请注意,您只能对[0,218340105584896]范围内的数字执行此操作,因此不可能表示218340105584896。

 类似资料:
  • 问题内容: 我有一个带有String的对象,该对象具有唯一的id。(例如“ ocx7gf”或“ 67hfs8”),我需要为其提供int hascode()的实现,该实现显然是唯一的。 如何以最简单/最快的方式将字符串转换为唯一的int? 10倍 编辑-确定。我已经知道String.hashcode是可能的。但是不建议在任何地方使用。实际上’,如果不建议使用其他任何方法- 如果我的对象在集合中并且需

  • 问题内容: 如何使用数字和字母生成一个随机的,唯一的字符串以用于验证链接?就像您在网站上创建帐户一样,该帐户会向您发送一封包含链接的电子邮件,您必须单击该链接才能验证您的帐户…是的…其中之一。 如何使用PHP生成其中之一? 更新: 刚刚记得。这是一个PHP函数,可根据当前时间(以微秒为单位)生成唯一标识符。我想我会用的。 问题答案: 如果您不需要它随着时间的流逝而变得绝对独特,请执行以下操作: 否

  • 我看过关于在Java中获取Unicode字符的码位号的问答。例如,问题“如何获取Unicode字符的代码?”?。 但是我想要相反的结果:给定一个整数,我如何得到分配给该码位号的字符的文本? 基元数据类型没有用处,仅限于Unicode字符集的基本多语言平面。该平面大约代表Unicode中定义的前64000个字符。但Unicode已经增长到将近两倍,现在定义了113000多个字符。分配给字符的数字范围

  • 问题内容: 我想将字符添加到字符串中,但要确保最终列表中的所有字母都是 唯一的 。 例如:→ 现在,我当然想到了两种解决方案。一种是使用,它将字符与ASCII码映射。因此,每当我遇到一个字母时,它都会将索引设置为。之后,我将扫描列表并附加所有已设置的列表。时间复杂度为 O(n) 。 另一个解决方案是使用和遵循相同的过程。映射完每个字符后,我将对字典中的每个键进行操作。这也将具有 线性 运行时间。

  • 我只是好奇为什么Lucene不以标准的方式区分字符串和数值。。例如,范围查询的和,并在默认情况下将它们全部视为字符串。 是否有任何特殊原因将这两种情况都视为字符串值?

  • 问题内容: 我有一个程序可以从Twitter流API实时解析推文。在存储它们之前,我将它们编码为utf8。某些字符最终以?,??或???出现在字符串中 而不是它们各自的unicode代码,并且会引起问题。经过进一步调查,我发现有问题的字符来自“表情符号”块 U + 1F600-U + 1F64F和“其他符号和象形文字”块 U + 1F300-U + 1F5FF。我尝试删除,但未成功,因为匹配器最终