第一题 231. Power of Two
题目描述
给定一个整数,编写函数判断它是否是2的幂。
算法
正常算法
|
|
Bit
如果是2的幂,那么最高位数字的最高位是1,且只有一个1
|
|
第二题 342. Power of Four
题目描述
给定一个整数(32位有符号),编写函数判断它是否是4的幂。
测试用例如题目描述。
进一步思考:你可以不用循环/递归解决问题吗?
算法
如果这个数为4的幂,那么其满足3个条件:
0
- 是2的幂 (num & (num - 1)) == 0 或 Integer.bitCount(num) == 1
- (num - 1) % 3 == 0
对于第三条证明
对于 2^n - 1 如果 n为偶数,那么2^n就是4的幂,如果n为奇数,就不是。
如果n为偶那么:
2^n - 1 = (2^(n/2) + 1)*(2^(n/2) - 1)对于三个连续的数,(2^(n/2) + 1),2^(n/2),(2^(n/2) - 1)必有一个能被3整除
如果n为奇数
那么2^(n/2) + 1是个小数,必然不能被3整除。
即,如果(num - 1) % 3 == 0, 那么n为偶,num为4的幂
|
|
第三题 326. Power of Three
题目描述
给定一个整数,编写函数判断它是否是3的幂。
进一步思考:
你可以不用循环/递归解出本题吗?
算法
|
|
第四题 247. Strobogrammatic Number II
题目描述
找出所有长度为n且这个数字旋转180°等于本身的数字
算法
直接计算
|
|
利用单双对称(非递归)
|
|
利用单双对称 (递归)
|
|
第五题 248. Strobogrammatic Number III
题目描述
给定数字的起始和结束,统计这个区间中,满足数字旋转180°等于本身的数字
算法
由于有时间复杂度的限制,不能直接循环,我们可以通过上一题的递归方法,在加上循环,进行统计。
|
|
第六题 263. Ugly Number
题目描述
编写程序判断一个给定的数字是否为“丑陋数” ugly number
丑陋数是指只包含质因子2, 3, 5的正整数。例如,6, 8是丑陋数而14不是,因为它包含额外的质因子7
注意,数字1也被视为丑陋数
算法
|
|
第七题 264. Ugly Number II
题目描述
编写程序寻找第n个“丑陋数” ugly number
丑陋数是指只包含质因子2, 3, 5的正整数。例如,1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前10个丑陋数。
注意,数字1也被视为丑陋数
算法
利用数组循环找出当前最小值,并指定3个指针分别指向当前2,3,5所在的位置,不断循环。知道找到第k个
|
|
第八题 313. Super Ugly Number
题目描述
编写程序寻找第n个“超级丑陋数”
超级丑陋数是指只包含给定的k个质因子的正数。例如,给定长度为4的质数序列primes = [2, 7, 13, 19],前12个超级丑陋数序列为:[1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32]
注意:
(1) 1 被认为是超级丑陋数,无论给定怎样的质数列表.
(2) 给定的质数列表以升序排列.
(3) 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000.
算法
与之前的找到第n个一样,只是现在换成矩阵形式
|
|
第九题 69. Sqrt(x)
题目描述
求平方根
算法
牛顿法和二分法
|
|
第十题 367. Valid Perfect Square
题目描述
给定一个正整数num,编写函数:如果num是完全平方数,返回True,否则返回False。
注意:不要使用任何内建函数,例如sqrt。
测试用例如题目描述。
算法
同样利用之前的两种算法进行计算
|
|