假设我有一个无符号整数,称它为低,另一个称它为高,使得高>低。 问题是在此范围内找到不同的数字集。 例如,假设low为1,high为20,那么答案为20,因为此范围内的所有数字都是不同的数字集。如果假设low为1,high为21,那么答案是20,因为12和21有相同的数字集合ie1,2。我不想寻找暴力破解算法,如果任何人有更好的解决方案,那么通常的暴力破解方法请告诉..如何在整数范围内找到不同的数字集数字?
回答
有显然是一个数学答案,虽然我承认,我没有它的工作到目前为止。
简单地说,如果低= 1,高= 99,那么我们有以下几点:
0 - 9 = 10 unique numbers
10-19 = 10 unique numbers
20-29 = 9 unique numbers
30-31 = 8 unique numbers
40-49 = 7 unique numbers
50-59 = 6 unique numbers
60-69 = 5 unique numbers
70-79 = 4 unique numbers
80-89 = 3 unique numbers
90-99 = 2 unique numbers
这或许会更容易计算出,如果我们假设所有的号都具有相同的位数,在需要的地方使用前导零。例如01,02,03,04,1,2,3,4。这意味着01和10会匹配。 然后我们数分布的变化:
0 - 9 = 10 unique numbers
10-19 = 9 unique numbers
20-29 = 8 unique numbers
30-31 = 7 unique numbers
40-49 = 6 unique numbers
50-59 = 5 unique numbers
60-69 = 4 unique numbers
70-79 = 3 unique numbers
80-89 = 2 unique numbers
90-99 = 1 unique numbers
你可以看到,它应该可以立足的10本使用因素递推公式来确定多少唯一的数字可能有。 困难在于如何处理可变的起点和终点,例如低= 25和高= 87. 这仍然是一个开始,我会进一步思考。
您的示例很奇怪。我认为你搞乱了范围。 '10-19' ='{10,11,12,13,14,15,16,17,18,19]'这给出了10个唯一的数字。你的意思是说'0-19'只有'9'多于'0-9'? – 2010-04-09 08:59:49
@Matthieu - 在第二个例子中,我建议我们包含一个前导零。因此01和10是相同的。 – ChrisBD 2010-04-12 08:13:23
也许这将让你开始: mathematic combinations
http://www.codeguru.com/cpp/cpp/algorithms/combinations/article.php/c5117
我不认为这会有所帮助。如果它是正确的方式,我想知道如何? – 2010-04-07 12:45:58
你是在算法还是代码之后?哎呀抱歉,我的评论错误的地方。 – ChrisBD 2010-04-07 13:04:13
我想我终于裹着我的头周围的问题。
让我们范围[low,high]
并把数字该范围内套中根据它们的位作为这样:
- “121” - >设置为 “112”
- “122” - >集“122”
- “211” - >设置为“112”
我们想知道,将包含一个独特的元素套数。
我会建议最简单的方法来做到这一点,其实是......这样做。
def rangeCount(low, high):
sets = defaultdict(list)
for i in range(low, high+1):
key = `i`.sort() # obtain digits and sort them
sets[key].append(i)
count = 0
for v in sets.values():
if len(v) == 1: count = count + 1
return count
好吧,这是暴力破解,但至少每个人都应该是相同的页面上立即:)
我已经实现了这个,但是如果范围是1到10亿,那么多少套呢?我期待有人会发现任何背后的数学系列。 – 2010-04-07 16:03:08
他们可能,我只是把它写下来,这样任何人都可以更容易地测试其结果。 – 2010-04-07 16:34:50
感谢Matthieu,现在我更好地理解了这个问题(但我至今不知道如何将复杂性带到O(高 - 低)) – 2010-04-07 16:52:58
- 1. 找到一个范围内的整数
- 2. 哪种算法可以找到数字范围内的空数字范围?
- 3. 使用循环在范围内查找具有不同数字的数字
- 4. 如何在数字范围内找到可用的批次php
- 5. 查找范围内的数字位置
- 6. c#如何找到范围内的数字位置
- 7. 如何查找重复数字在一个范围内的数字
- 8. 如何查找数字范围
- 9. 我有一个字母数字范围。我有一个数字,将在该范围内找到
- 10. 检查数字范围的整除性而不重复数字
- 11. VBA:在其中一个范围内找到缺失的数字
- 12. 如何在每个数字位于数字范围内生成随机数字?
- 13. 如何在Python中将字符映射到整数范围[-128,127]?
- 14. 在动态范围内从0找到最大数字VBA
- 15. 在一定范围内的Sphinxsearch数字
- 16. 查找范围内的数字的因数
- 17. 算法:找出给定范围内的数字的个数
- 18. 查找基于范围内的数字的字符串
- 19. Java int的VS整数 - 不同范围
- 20. java找到的数字在一个范围内的数字增加到10的倍数
- 21. 在java中查找数字范围
- 22. 范围的字符串作为整数
- 23. 计数范围内的整数
- 24. 在字段范围内有效查询丢失的整数?
- 25. 如何选择日期范围内不同天数的数量?
- 26. 如何统计数字范围内的数组项目
- 27. 复制数字范围栏吧在一定范围内的人
- 28. 查找Mathematica中的数字范围
- 29. 给定一些整数范围,找到每个范围至少包含一个整数的最小集合
- 30. Prolog数字范围
你到底在找什么?在区间[low,n]中的所有数字具有不同数字的情况下,最大n <=高?还是你想要这个属性的[low,high]的任意子集的最大大小?或者有些不同? – 2010-04-07 12:42:53
我希望确切地指出这些数字在低位和高位之间。 – 2010-04-07 13:02:20
你是在算法还是代码之后做这个? – ChrisBD 2010-04-07 13:06:01