leetcode: power of three 三种解法
一、题目
leetcode 上有这么一道题,power of three.
题目如下:
Given an integer, write a function to determine if it is a power of three.
要求:
Could you do it without using any loop / recursion?
就是说给出一个数,判断该数是否是 3 的 n 次方。且最好不要使用循环或者迭代来实现。
二、解法:
1、方法一、
使用最基本的循环判断,通过循环判断目标值是否可以对 3 进行整除。代码如下:
1 | while(n) |
2、方法二、
由于在 int(4字节)的范围内,3 最大的一个次方数为 3^19,即 1162261467,可用该数值对目标值进行取余操作,如果余数为 0,则说明目标值是一个 3 的某次方数。代码如下:
1 | if(n <= 0)return false; |
3、方法三
通过对目标值取 3 的对数,判断该值是否为整数来判断。利用换底公式,log3(n) = log10(n) / log10(3)
。利用a-(int)a == 0
来判断 a 是否为整数。代码如下:
1 | double res; |
三种解法的代码在 leetcode 网站的运行时间如下图:
- 1、方法一
- 2、方法二
- 3、方法三
可见,第二种最好,第一种次之,第三种最差。
类似的题目还有 power of two, power of four,使用上述三种方法略加修改即可。但是在题目 power of four 时,由于 4 本身是 2 的平方,所以第二种方法会失效。这是因为 2^奇数次方 != 4 的 n 次方
。所以需要加入限制条件,代码如下:
1 | if(n <= 0)return false; |
三、附录
全部代码:
1 | /* |
原文链接:本人CSDN博客
- 标题: leetcode: power of three 三种解法
- 作者: cyang812
- 创建于 : 2017-08-01 22:16:39
- 更新于 : 2020-02-19 21:32:46
- 链接: https://blog.cyang.tech/2017/08/01/leetcode: power of three 三种解法/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论