请教:判断n位数1的个数的时间复杂度是多少,为什么,谢谢
- C/C++ code
int NumberOfOne(int num){ int count =0; while(num) { if(num%10==1)count++; num/=10; } return count;}[解决办法]
一般而言,一个算法的执行时间的求解问题的规模n的函数,这是因为问题的规模往往决定了算法工作量的大小。但是,我们不关心它是个怎样的函数,只关心它的数量级量度,及它与什么简单函数f(n)是同一个数量级的。
常见的时间复杂度,按数量级递增排序有:常数阶O(1)、线性阶O(n)、平方阶O(n2)、立方阶O(n3)等
其中O是数学符号
而你的这个程序的问题规模明显就是数的位数n,故时间复杂度为O(n)
[解决办法]
[解决办法]
[解决办法]
用容斥原理最简单,没有之一。。
参见这个题目:http://sznoi.cn/oj/ShowProblem?problemid=m005