第一题 172. Factorial Trailing Zeroes
题目描述
给定一个整数n,返回n!(n的阶乘)数字中的后缀0的个数。
注意:你的解法应该满足多项式时间复杂度。
算法
我们发现,所有结尾的0都是有5 * 2得来的,因此我们只需要计算n中5的个数即可。但是注意25,125,…可能包含多个5.
|
|
第二题 233. Number of Digit One
题目描述
统计在小于等于n的数中,总共出现了多少个1
注意:
不是多少个数出现1,而是多少个1。11算两个
算法
if n = xyzdabc
对于千位
(1) xyz * 1000 if d == 0
(2) xyz * 1000 + abc + 1 if d == 1
(3) xyz * 1000 + 1000 if d > 1
由此我们可以写出算法
|
|
第三题 9. Palindrome Number
题目描述
查看一个数字看是否能够形成回文数,注意不能使用额外空间
算法
我们将这个数从左到右不断累加,看最后是否和其本身相同
|
|
第四题 50. Pow(x, n)
题目描述
求一个数的n次方
算法
利用回溯,将算法复杂度减小到logn级别,每次对半开,减少计算量。
Double X
|
|
Double myPow
|
|
第五题 372. Super Pow
题目描述
计算a ^ b mod 1337的值。a是正整数,b是一个极大的正整数,以数组形式给出。
算法
ab % k = (a%k)(b%k)%k
a^1234567 % k = (a^1234560 % k) * (a^7 % k) % k
= (a^123456 % k)^10 % k * (a^7 % k) % k
我们可以写出方程
f(a,1234567) = f(a, 1234560) * f(a, 7) % k = f(f(a, 123456),10) * f(a,7)%k;
通过回溯的方法,实现这个方法
|
|
第六题 368. Largest Divisible Subset
题目描述
给定一个不重复正整数集合,寻找最大子集,使得子集中的任意一对元素 (Si, Sj) 均满足Si % Sj = 0或者Sj % Si = 0。
如果存在多种答案,返回其中之一即可。
测试用例如题目描述。
算法
采用动态规划的思想,首先将每个数可能存在的最长序列记录下来。然后找到对应的这个最长序列,之后再将每个数一一添加进去。
|
|
第七题 507. Perfect Number
题目描述
判断某正整数n是否等于除其本身外所有因子之和
算法
由于对称性,只需要小于等于自身开方即可
|
|