python面试题之中有这么一个常见的题目,那就是给定一个整数n,然后获取1-n之间数字1的出现次数。这个题目主要考验的就是开发者对于算法以及基础运算符的使用程度,那么下文有这个问题的相关代码以及解题思路,感兴趣的话就往下看看吧。
一、解题思路
那么这个问题的主要关键点在于给定的n是几位数,个位数那么就只会有一个数字1。十位数如果是19就会有11个数字1,而每增加10就会多出来一个数字一。那么百位数以及往上的也是相同道理,不过它们会在百位上出现100次,十位上出现18次,个位上又出现9次。
那么根据这个就是可以得到对应的公式f(n) = 9 * f(n-1) + 10 ** (n-1),只需要去套用这个公式来编写代码就可以了。
二.代码实现
那么只需要去定义一个递归函数就可以了,该函数只接受数字n一个参数,不过该数字需要是整数。在该函数内先判断其是否小于等于0,如果为0就表示无效值直接将其返回。如果为数字1也直接返回1,因为1有且只会出现一次。
而其他的值就是要在函数内去将这个公式给编写出来,因为该函数会调用自身,所以会将每次结果保存起来参与下次函数的调用。最后当n的值变为传进来数值时,就将获取到的每位数相加起来返回即可得到数字1出现次数,详细代码如下:
def get_1_digits(n): if n <= 0: return 0 if n == 1: return 1 current = 9 * get_1_digits(n-1) + 10 ** (n-1) return get_1_digits(n-1) + current
以上就是关于“Python数字1出现的次数怎么获取?Python如何获取序列中数字1出现次数”的全部内容了,希望对你有所帮助。