【剑指offer】Q32:从1到n整数1出现的次数(python)

def q32(n, len):
	if n < 0:
		return 0
	elif n <= 1:
		return n
	total = 0
	while n > 0:
		if  n >= 1 and n < 10:
			total += 1
			return total
		p1 = n % (10**(len - 1))
		h = n / (10**(len - 1))
		p2 = p1 + 1
		n = p1
		if h > 1:
			total += 10**(len - 1)
		else:
			total += p2
		total += 10 **(len -2) * h * (len - 1)
	return total

【剑指offer】Q32:从1到n整数1出现的次数(python)

时间: 2024-10-07 04:45:15

【剑指offer】Q32:从1到n整数1出现的次数(python)的相关文章

【剑指offer】Q38:数字在数组中出现的次数

与折半查找是同一个模式,不同的是,在这里不在查找某个确定的值,而是查找确定值所在的上下边界. def getBounder(data, k, start, end, low_bound = False): if end < start : return -1 while start <= end: mid = ( start + end ) >> 1 if data[ mid ] > k: end = mid - 1 elif data[ mid ] < k: star

剑指offer (32) 从1到n整数中1的出现次数

题目:输入一个整数,求从1到n这个n个整数的十进制表示中1的出现次数 方法一:最直观的解法  T(n) = O(nlgn) int NumberOf1Between1AndN_Solution1(unsigned int n) { int number = 0; for(unsigned int i = 1; i <= n; ++ i) number += NumberOf1(i); return number; } int NumberOf1(unsigned int n) { int num

《剑指offer》:[38]数字在排序数组中出现的次数

"沟通.学习能力就是看面试者能否清晰.有条理地表达自己,是否会在自己所得到的信息不够的情况下主动发问澄清,能否在得到一些暗示之后迅速做出反应纠正错误"                                                                                                                   ---陈黎明(MSoft-SDE) 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3

《剑指offer》把字符串转换成整数

[ 声明:版权所有,转载请标明出处,请勿用于商业用途.  联系信箱:[email protected]] 题目链接:http://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e?rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 思路 这一题的坑比较多,

《剑指Offer》题目:数值的整数次方

题目描述:数值的整数次方给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 题目分析:题目的关键在于要考虑exponent为负数的情况. Java代码: public class Power { public static double power(double base, int exponent) { double res = 1.0; if(exponent == 0){ return 1.0; } if(exponent > 0

剑指offer十二之数值的整数次方

一.题目 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 二.思路 1.传统方法计算,时间复杂度O(n) 2.递归方式计算,时间复杂度O(logn) 当exponent为偶数时,例如求base^10,则result= base^5  *  base^5: 当exponent为奇数数时,例如求base^11,则result= base^5 *  base^5 * base: 接着采用递归的方法,计算base^5 即可. 三.代码 1.

剑指offer(31)1~n整数中1出现的次数

题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数. 题目分析 这题说实话挺难的,暴力解法比较简单,主要是想到时间复杂度更好的解法很难. 第一种暴力解法,也就是逐个判断. 第二种运用了根据位数来做,逐位求解,并且对于特殊情况做下判断. 主要注意下每位0,1,>

【剑指offer】16、数值的整数次方

题目 实现double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同样需要考虑大数问题. 思路 题目意思很清楚,需要考虑情况周全. 1.若base=0,exp <= 0 2.若exp >= 0 , 直接return计算后的数值 若exp <= 0 ,return 计算后数值的倒数 注意定义是double,因此写代码时要写成0.0,1.0 class Solution { public: double Power(d

【剑指offer】43、1~n整数中1出现的次数

题目 输入一个整数,求1~n的整数十进制表示中1出现的次数.如12,有1,10,11,12,总共出现了5次. 思路 注意不是统计出现1的数字的多少,而是统计1出现了几次. 我们按位来分析 个位: 如果weight=0,则个位出现1的次数 = round 如果weight>=1,则个位出现1的次数=round + 1 十位: 如果weight=0,则次数 = round * base 如果weight=1,则次数 = round * base + former + 1  ( former = n

剑指offer 计算1到n中所有1出现的次数

如题,显而易见,我们可以依次计算所有数中的1来完成该功能: int NumOfOneBetweenN(int n) { int sum = 0; for(int i=1;i<n;++i) sum += NumOfOne(i); return sum; } int NumOfOne(int i) { int sumi = 0; while(i) { if(i%10 == 1) sumi++; i/=10; } return sumi; } 时间复杂度为O(n*logn),效率不高. 那么,换一种思