您的位置:首页 > 其它

[LeetCode][数论]Power of Three&Power of Two

2016-03-24 16:35 351 查看
题目描述:

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的幂在不进行循环的条件下

过程:数a的幂数有什么特点呢?因为同一个数的幂数之间的关系为大数能被小数整除,至少为底数,所以一个小trick就是利用当前系统支持的3的最大幂数来整除给定的数字,如果能整除,则是其幂数,如果不能整除则不是,为什么这个成立呢?因为一个数的幂数具有一个特征:因子全部为同一个数a,所以如果给定数中含有a之外的因子,一定不能被整除。对于2来说还有特殊的地方就是2的幂数假设为n,n&n-1值为0,这是只适用于2的幂数的一种求法retu

代码实现:

public class Solution {
public boolean isPowerOfThree(int n) {
return (n>0 && 1162261467%n==0);
}
}


public class Solution {
public boolean isPowerOfTwo(int n) {
/*if(n <= 0)
return false;

while(n % 2 == 0) n /= 2;

if(n==1) return true;
else return false;*/

//return ((n>0) && (1073741824 %n == 0));
if(n<=0)
return false;

int result = n&(n-1);

if(result == 0)
return true;
else
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: