一道题目想到的

来源:互联网 发布:手机淘宝二维登录 编辑:程序博客网 时间:2024/05/21 06:34

昨天晚上陪人参加阿里的网络面试,看到一道题目,大概意思是:

由1、2、3、4、5组成的数字中,大于23154且小于45132的数字有多少个?1

本意应该是让使用排列组合计算吧,我直接写了一个简单的程序解决了。忽然发现,其实有好多的题目是要求把一个数字的各个位置的数字提取出来的。于是今天又稍加归纳,写了一个通用的函数。内容如下:

def getDigitNum(num):    i = 0    while num > 0:        num = (int)(num / 10)        i = i+1    return idef getDigit(num, n):    bit = getDigitNum(num)    n = bit - n + 1    den = 10 ** (n - 1)    return (int)(num / den) % 10count = 0a = [0] * 5for i in range(12345, 54322):    if i > 23154 and i < 45132:        for j in range(getDigitNum(i)):            a[j] = getDigit(i, j + 1)        if sorted(a) == range(1, 6):            count = count + 1print count

思路非常简单,将需要的位数移至个位(通过除法+取整),余10即可。

其实,这个思路如果不加总结的话,每次都可以想出来。但是,总结之后,以后碰到这个问题就不用再思考了。小问题记思路,大问题就写一个自己用的库吧,就像《Unix网络编程》里面的一样!

以后要注意这些小问题了。能够加快解决问题的速度。


  1. 具体的数字不记得了,这个是我自己编的。 ↩
0 0