Power of Three
来源:互联网 发布:淘宝代码装修教程 编辑:程序博客网 时间:2024/05/19 15:19
https://leetcode.com/problems/power-of-three/
Given an integer, write a function to determine if it is a power of three.
Follow up:
Could you do it without using any loop / recursion?
3的次方数没有显著的特点,最直接的方法就是不停地除以3,看最后的余数是否为1,要注意考虑输入是负数和0的情况,参见代码如下:
解法一:
bool isPowerOfThree(int n) { while (n && n % 3 == 0) { n /= 3; } return n == 1;}
题目中的Follow up让我们不用循环,那么有一个投机取巧的方法,由于输入是int,正数范围是0-231,在此范围中允许的最大的3的次方数为319=1162261467,那么我们只要看这个数能否被n整除即可,参见代码如下:
解法二:
bool isPowerOfThree(int n) {
return (n > 0 && 1162261467 % n == 0);
}
最后还有一种巧妙的方法,利用对数的换底公式来做,高中学过的换底公式为loga(b) = logc(b) / logc(a),那么如果n是3的倍数,则log3(n)一定是整数,我们利用换底公式可以写为log3(n) = log10(n) / log10(3),注意这里一定要用10为底数,不能用自然数或者2为底数,否则当n=243时会出错。现在问题就变成了判断log10n / log103是否为整数,在c++中判断数字a是否为整数,我们可以用 a - (int)(a) == 0 来判断,参见代码如下:
解法三:
bool isPowerOfThree(int n) { if(n < 0) return false; double re = log10(n) / log10(3); return ((int)(re) - re == 0);}
0 0
- leetcode Power of Three
- Leetcode: Power of Three
- LeetCode Power of Three
- 326. Power of Three
- Leetcode230: Power of Three
- Power of Three
- [leetcode]Power of Three
- LeetCode-Power of Three
- leetcode power of three
- 64. Power of Three
- LeetCode----Power of Three
- 326. Power of Three
- Power of Three
- LEETCODE--Power of Three
- 326. Power of Three
- 【leetcode】Power of Three
- 326. Power of Three
- 326. Power of Three
- 工作中遇到的各种小问题之tomcat启动问题
- 理解js中原型
- 动态规划 III——A - Railway tickets
- 修改grub2默认启动顺序
- c++中vector的用法详解
- Power of Three
- 结合开发文档分析volley(二)
- SG函数
- Java单例模式与多线程
- 读书笔记-陆-《从你的全世界路过》
- 码神作业(九九乘法表)
- Android 6.0特性
- 递归
- Partition List