【剑指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

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-08-24 03:02:49

【剑指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》:[38]数字在排序数组中出现的次数

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

剑指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),效率不高. 那么,换一种思

剑指offer系列——37.数字在排序数组中出现的次数

Q:统计一个数字在排序数组中出现的次数. A: 1.用STL库函数解决 (1)count函数:algorithm头文件定义,其功能类似于find.这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果. public: int GetNumberOfK(vector<int> data ,int k) { return count(data.begin(),data.end(),k); } 或 (2)equal_range函数:函数equal_range()返回first和last

【剑指Offer】37:数字在排序数组中出现的次数

题目描述 统计一个数字在排序数组中出现的次数. 题解一:循环 1 public static int GetNumberOfK(int [] array , int k) { 2 if(array.length==0){ 3 return 0; 4 } 5 int count=0; 6 for(int i=0;i<array.length;i++){ 7 if(array[i]==k){ 8 count++; 9 } 10 } 11 return count; 12 } 题解二:二分法 1 //

【剑指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: tot

【剑指offer】树的子结构

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25907685 剑指offer第18题,九度OJ上测试通过! 题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行一个整数n,m(1<=n<=1000,1<=m<=1000):n代表将要输入的二叉树A的节点个数(节点从1开始计数),m代表将要输入的二叉树B的节点个数(节点从1开始计数).

【剑指offer】二叉树的镜像

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25915971 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000,n代表将要输入的二叉树节点的个数(节点从1开始编号).接下来一行有n个数字,代表第i个二叉树节点的元素的值.接下来有n行,每行有一个字母Ci.Ci='d'表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号.C

【剑指offer】数组中仅仅出现一次的数字(1)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27649027 题目描写叙述: 一个整型数组里除了两个数字之外,其它的数字都出现了两次.请敲代码找出这两个仅仅出现一次的数字. 输入: 每一个測试案例包括两行: 第一行包括一个整数n,表示数组大小.2<=n <= 10^6. 第二行包括n个整数,表示数组元素,元素均为int. 输出: 相应每一个測试案例.输出数组中仅仅出现一次的两个数.输出的数字从小到大的顺序. 例子输入: 8 2 4

牛客网上的剑指offer题目

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一个字符串中的空格替换成"%20" 两种方法实现:输入一个链表,从尾到头打印链表每个节点的值 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 剑指offer 斐波那契数列 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个