给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27 输出: true
示例 2:
输入: 0 输出: false
示例 3:
输入: 9 输出: true
示例 4:
输入: 45 输出: false
普通人的实现方法: 不过 --- 超出时间限制
public class Solution {
public bool IsPowerOfThree(int n) {
while (n!=1)
{
if (n%3!=0)
{
return false;
}
n /= 3;
}
return true;
}
}
方法二:这样的方式: C#提交中击败了67.19% 的用户
public class Solution {
public bool IsPowerOfThree(int n) {
return n > 0 && 1162261467 % n == 0;
}
}
1162261467 是 3的19次幂,可见,在实际编程中可以多用取余的方式。
方法三: C#提交中击败了13.1% 的用户
Math.Log10(n) 返回指定数字以 10 为底的对数。直接获取了小数部分。
public class Solution {
public bool IsPowerOfThree(int n) {
double tts = (Math.Log10(n) / Math.Log10(3));
if (tts % 1 == 0)
{
return true;
}
else
{
return false;
}
}
}
以上程序如果写在一行上,执行会大大提高效率:C#提交中击败了70.31% 的用户
public class Solution {
public bool IsPowerOfThree(int n) {
return (Math.Log10(n) / Math.Log10(3) % 1 == 0);
}
}

本文介绍了一种高效判断整数是否为3的幂次方的方法,通过直接比较余数和使用对数计算,避免了循环除法的效率低下。探讨了不同方法在实际编程中的应用及效率对比。
184

被折叠的 条评论
为什么被折叠?



