leetcode: power of three 三种解法
来源:互联网 发布:mysql 小于1970 编辑:程序博客网 时间:2024/06/03 14:58
一、题目
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 进行整除。代码如下:
while(n) { if(n==1)return true; if(n%3 != 0) return false; n /= 3; if(n == 1) return true; } return false;
2、方法二、
由于在 int(4字节)的范围内,3 最大的一个次方数为 3^19,即 1162261467,可用该数值对目标值进行取余操作,如果余数为 0,则说明目标值是一个 3 的某次方数。代码如下:
if(n <= 0)return false;if(1162261467%n == 0) return true;else return false;
3、方法三
通过对目标值取 3 的对数,判断该值是否为整数来判断。利用换底公式,log3(n) = log10(n) / log10(3)
。利用a-(int)a == 0
来判断 a 是否为整数。代码如下:
double res;res = log10(n)/log10(3);if(res- (int)res == 0) return true;else return false;
三种解法的代码在 leetcode 网站的运行时间如下图:
- 1、方法一
- 2、方法二
- 3、方法三
可见,第二种最好,第一种次之,第三种最差。
类似的题目还有 power of two, power of four,使用上述三种方法略加修改即可。但是在题目 power of four 时,由于 4 本身是 2 的平方,所以第二种方法会失效。这是因为2^奇数次方 != 4 的 n 次方
。所以需要加入限制条件,代码如下:
if(n <= 0)return false; if(4294967296%n == 0) { if((int)(log10(n)/log10(2)) % 2 == 0) return true; else return false; } else return false;
三、附录
全部代码:
/**326. Power of Three* three ways to solution this problem*/#include <stdio.h>#include <stdbool.h>#include <math.h>#define solution 3bool isPowerOfThree(int n) { #if solution==1 //循环迭代 while(n) { if(n==1)return true; if(n%3 != 0) return false; n /= 3; if(n == 1) return true; } return false; #elif solution==2 //32位数中最大的3次方数 if(n <= 0)return false; if(1162261467%n == 0) return true; else return false; #elif solution==3 //对数换底公式 //使用 a-(int)a == 0; 来判断a是否为整数 double res; res = log10(n)/log10(3); if(res- (int)res == 0) return true; else return false; #endif}int main(){ int num = 4782968; bool res = false; res = isPowerOfThree(num); printf("res = %d\n",res); return 0;}
阅读全文
0 0
- leetcode: power of three 三种解法
- Power of Three | leetcode 三的幂
- 326. Power of Three解法
- 【LeetCode】326. Power of Three (优雅的数学解法)
- leetcode Power of Three
- Leetcode: Power of Three
- LeetCode Power of Three
- [leetcode]Power of Three
- LeetCode-Power of Three
- leetcode power of three
- LeetCode----Power of Three
- LEETCODE--Power of Three
- 【leetcode】Power of Three
- leetcode---Power of Three
- 《leetCode》:Power of Three
- leetcode: Power of Three
- [LeetCode]Power of Three
- leetcode Power of Three
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?
- python selenium phantomjs学习
- Angular4 组件通讯方法大全
- matlab常用快捷键
- 畅通工程
- leetcode: power of three 三种解法
- 计算员工合同到期日期
- 自制留言板
- js类型转换
- java程序 升级版ATM取款机
- java基础学习(三)--异常处理
- 更好的针对接口编程,使用接口内部类
- MySQL性能优化的最佳21条经验
- poj1390 Blocks(区间dp)