2010-04-07 73 views
3

假设我有一个无符号整数,称它为低,另一个称它为高,使得高>低。 问题是在此范围内找到不同的数字集。 例如,假设low为1,high为20,那么答案为20,因为此范围内的所有数字都是不同的数字集。如果假设low为1,high为21,那么答案是20,因为12和21有相同的数字集合ie1,2。我不想寻找暴力破解算法,如果任何人有更好的解决方案,那么通常的暴力破解方法请告诉..如何在整数范围内找到不同的数字集数字?

+1

你到底在找什么?在区间[low,n]中的所有数字具有不同数字的情况下,最大n <=高?还是你想要这个属性的[low,high]的任意子集的最大大小?或者有些不同? – 2010-04-07 12:42:53

+0

我希望确切地指出这些数字在低位和高位之间。 – 2010-04-07 13:02:20

+0

你是在算法还是代码之后做这个? – ChrisBD 2010-04-07 13:06:01

回答

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. 这仍然是一个开始,我会进一步思考。

+0

您的示例很奇怪。我认为你搞乱了范围。 '10-19' ='{10,11,12,13,14,15,16,17,18,19]'这给出了10个唯一的数字。你的意思是说'0-19'只有'9'多于'0-9'? – 2010-04-09 08:59:49

+0

@Matthieu - 在第二个例子中,我建议我们包含一个前导零。因此01和10是相同的。 – ChrisBD 2010-04-12 08:13:23

1

我想我终于裹着我的头周围的问题。

让我们范围[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 

好吧,这是暴力破解,但至少每个人都应该是相同的页面上立即:)

+0

我已经实现了这个,但是如果范围是1到10亿,那么多少套呢?我期待有人会发现任何背后的数学系列。 – 2010-04-07 16:03:08

+0

他们可能,我只是把它写下来,这样任何人都可以更容易地测试其结果。 – 2010-04-07 16:34:50

+0

感谢Matthieu,现在我更好地理解了这个问题(但我至今不知道如何将复杂性带到O(高 - 低)) – 2010-04-07 16:52:58

相关问题