非重复数字的计数

时间:2017-04-04 07:16:00

标签: algorithm

给定一个数字,返回具有非重复数字的数字的数量,直到该数字从1开始。

测试案例1:

示例输入

size_t

示例输出

7

测试案例2:

示例输入

7

示例输出

3456

我会写程序,但我不知道问题陈述是什么,因为样本输入测试用例让我感到困惑。

2 个答案:

答案 0 :(得分:3)

问题 是不明确的,因为有两种合理的解释方式"重复数字"。

  • 首先,一个数字有一个"重复的数字"如果它连续两次或更多次具有相同的数字。例如,12334有一个重复的数字(3)。

  • 其次,如果相同的数字出现两次,则数字会有重复的数字。所以1231在第一种意义上不会有重复的数字,但在这个意义上(1重复)。

通过检查他们给出的测试用例,我们可以找到正确的含义。

def nonrep1(n):
    return sum(all(c != d for c, d in zip(str(i), str(i)[1:])) for i in xrange(1, n+1))

def nonrep2(n):
    return sum(all(str(i).count(d) < 2 for d in '0123456789') for i in xrange(1, n+1))

assert nonrep1(7) == 7
assert nonrep1(3456) == 2562

assert nonrep2(7) == 7
assert nonrep2(3456) == 2562

最后的断言失败了,所以&#34;非重复的第一个含义&#34;是问题制定者想要的那个。

我编写了程序略显愚蠢的简洁版本,因此您现在仍然可以编写自己的代码,以便了解问题所在。

答案 1 :(得分:1)

问题是给定一个数字N.找出从1到N有多少个数字,它们没有重复的数字。

在第一种情况下,有7个数字从1到7不具有重复数字。

在第二种情况下,从1到3456的2562个数字没有重复数字。